实验六 Springboot整合Mybatis
目录
实验目的:
实验类型:
实验学时:
实验内容:
实验任务1:创建一个springboot工程导入Spring整合Mybatis相关依赖
实验任务2:同spring实验4一样,创建pojo类,service,controller,dao层
实验任务3:在资源文件下的application.properties文件写入如下代码
实验任务4:mapper映射文件
实验任务5:controller层代码
实验任务6:dao层代码
实验任务7:在浏览器中运行
总结:
实验目的:
- 了解Springboot整合Mybatis的作用
- 多参数使用注释
- 完成Customer增删改查的功能
- 使用动态sql完成查询功能
实验类型:
验证性
实验学时:
2学时
实验内容:
实验任务1:创建一个springboot工程导入Spring整合Mybatis相关依赖
<dependencies>
????<dependency>
????????<groupId>org.springframework.boot</groupId>
????????<artifactId>spring-boot-starter-web</artifactId>
????</dependency>
????<dependency>
????????<groupId>org.springframework.boot</groupId>
????????<artifactId>spring-boot-starter-test</artifactId>
????????<scope>test</scope>
????</dependency>
????<dependency>
????????<groupId>org.mybatis.spring.boot</groupId>
????????<artifactId>mybatis-spring-boot-starter</artifactId>
????????<version>1.3.2</version>
????</dependency>
????<dependency>
????????<groupId>mysql</groupId>
????????<artifactId>mysql-connector-java</artifactId>
????????<version>5.1.45</version>
????</dependency>
????<dependency>
????????<groupId>org.springframework.boot</groupId>
????????<artifactId>spring-boot-devtools</artifactId>
????????<scope>runtime</scope>
????????<optional>true</optional>
????</dependency>
</dependencies>
实验任务2:同spring实验4一样,创建pojo类,service,controller,dao层
Pojo代码
public class Customer {
????private Integer id;
????private String username;
????private String jobs;
????private String phone;
????public Integer getId() {
????????return id;
????}
????public void setId(Integer id) {
????????this.id = id;
????}
????public String getUsername() {
????????return username;
????}
????public void setUsername(String username) {
????????this.username = username;
????}
????public String getJobs() {
????????return jobs;
????}
????public void setJobs(String jobs) {
????????this.jobs = jobs;
????}
????public String getPhone() {
????????return phone;
????}
????public void setPhone(String phone) {
????????this.phone = phone;
????}
????@Override
????public String toString() {
????????return "Customer{" +
????????????????"id=" + id +
????????????????", username='" + username + '\'' +
????????????????", jobs='" + jobs + '\'' +
????????????????", phone='" + phone + '\'' +
????????????????'}';
????}
}
实验任务3:在资源文件下的application.properties文件写入如下代码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=x5
# 访问templates包下的文件
spring.web.resources.static-locations=classpath:/templates/,classpath:templates/static/
mybatis.mapper-locations=classpath:mapper/*.xml
实验任务4:mapper映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE?mapper
????????PUBLIC?"-//mybatis.org//DTD mapper 3.0//EN"
????????"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.li.dao.CustomerDao">
????<select id="query" resultType="com.li.pojo.Customer" >
????????select * from customer
????????<where>
????????????<if test="customer.username!=null and customer.username !=''">
???????????????and username like concat('%',#{customer.username},'%')
????????????</if>
????????????<if test="customer.jobs!=null and customer.jobs!=''">
????????????????and jobs like concat('%',#{customer.jobs},'%')
????????????</if>
????????</where>
????????<if test="pageNo!=null and pageNo!=''">
????????????limit 0,#{pageNo}
????????</if>
????</select>
???<insert id="add" parameterType="com.li.pojo.Customer">
???????insert into customer(username,jobs,phone) values(#{username},#{jobs},#{phone});
????</insert>
?????<update id="update" parameterType="com.li.pojo.Customer">
????????update customer set username=#{username},jobs=#{jobs},phone=#{phone} where id=#{id};
????</update>
????<delete id="delete" parameterType="int">
????????delete from customer where id=#{id};
????</delete>
</mapper>
实验任务5:controller层代码
@RestController
public class CustomerController {
????@Autowired
????CustomerService service;
????//1 如果
????//2 如果接受的的参数名不在pojo的属性中 ,那么通过@Param()将值床底到apper.xml中
????@RequestMapping("/query")
????public List<Customer> query(Customer customer,Integer pageNo){//返回集合?springboot 的Controller方法返回值可以自动转json,ssm不行
????????List<Customer> list=service.query(customer,pageNo);
????????System.out.println(list);
????????return list;
????}
????@RequestMapping("/add")
????@Transactional
????public void add(Customer customer){
????????customer.setJobs("123");
????????customer.setPhone("xxx");
????????customer.setUsername("123xx");
????????service.add(customer);
????}
????@Transactional
????public void update(Customer customer){
????????service.update(customer);
????}
????@Transactional
????public void delete(Integer id){
????????service.delete(id);
????}
}
实验任务6:dao层代码
@Component
public interface CustomerDao {
public List<Customer> query(@Param("customer") Customer customer, @Param("pageNo") Integer pageNo);
public void add(Customer customer);
public void update(Customer customer);
public void delete(Integer id);
}
实验任务7:在浏览器中运行
输入如地址:http://localhost:8080/query
可以查询出全部数据
输入地址:http://localhost:8080/query?username=张
可以看到姓张的数据
?
输入地址:http://localhost:8080/query?username=李&jobs=manager
可以查看到姓李工作是manager的数据
?
总结:
动态sql中的<where>标签可以自动省略掉sql语句前的and
当要传的参数较多时可以使用@Param()注解来指定传的参数名,传参数的方式不止一种,还可以用map等方式来传送参数。
?
|