SpringBoot整合Mybaties增删改查


使用 Java 开发或者学习过程中,最避免不了的是连接和操作数据库,此次,学习如何在Spring Boot中配置和使用Mybatis框架,提高开发效率。

1、填写pom.xml

<!-- mybatis依赖jar包 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        
        <!--  web项目依赖jar包 -->
           <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- 热部署依赖jar包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <!-- mysql连接jar包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
                
        <!-- 阿里巴巴druid数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                    <version>1.1.6</version>
        </dependency>

在这里插入图片描述

2、填写application.properties

#数据驱动可配也可以不配,因为系统会自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root
spring.datasource.password =root

#springboot有自带数据源这个也可不配置
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
#数据驱动可配也可以不配,因为系统会自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root
spring.datasource.password =root

#让控制台打印SQL语句,一般用于本地开发环境
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#springboot有自带数据源这个也可不配置
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource

3、User实体

//用户实体
public class User {

    private int id;
    
    private String name;
    
    private String phone;
    
    private int age;
    
    private Date createTime;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }    
}

4、Springboot主类

//@MapperScan会自动扫描里面的包,而且应该是可以自动给每个类装配一个Bean对象
@SpringBootApplication
@MapperScan("com.jincou.mapper")  
public class MainApplication {

    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

5、UserMapper

    /**
     * 功能描述:访问数据库的接口
     */
    public interface UserMapper {
        
        
        //推荐使用#{}取值,不要用${},因为存在注入的风险
         @Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name}, #{phone}, #{createTime},#{age})")
         @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")   //keyProperty java对象的属性;keyColumn表示数据库的字段
         int insert(User user);
                      
       //column指数据库中的列,property是指实体的属性名,如果一致就不需要写
        @Select("SELECT * FROM user")
        @Results({
            @Result(column = "create_time",property = "createTime")      
        })
        List<User> getAll();
      
        @Select("SELECT * FROM user WHERE id = #{id}")
        @Results({
             @Result(column = "create_time",property = "createTime")
        })
        User findById(Long id);
    
  
        @Update("UPDATE user SET name=#{name} WHERE id =#{id}")
        void update(User user);
    
        @Delete("DELETE FROM user WHERE id =#{userId}")
        void delete(Long userId);
    
    }

6、UserServise层

public interface UserService {

    //这里只写了个add方法,其它的直接在控制层调用Dao层,正常开发流程都应该写在Service层
    public int add(User user);      
}

7、UserServiseImpl

@Service
public class UserServiceImpl implements UserService{

    //因为主类的@MapperScan方法,所以自动为UserMapper装配了一个userMapper对象
     @Autowired
     private UserMapper userMapper;
     
     //这里你传过去的时候user的id为null,而insert之后传回回来的user会把数据库中的id值带回来,真强大
    @Override
    public int add(User user) {
        userMapper.insert(user);
        int id = user.getId();
        return id;
    }    
}

8、Controller类

@RestController
@RequestMapping("/api/v1/user")
public class UserController {
    
    //在UserServiceImpl定义了@Service实现类所以可以得到默认首字母小写的对象
    @Autowired
    private UserService userService;

    @Autowired
    private UserMapper userMapper;
    
    
    /**
     * 功能描述: user 保存接口
     */
    @GetMapping("add")
    public Object add(){
        
        User user = new User();
        user.setAge(11);
        user.setCreateTime(new Date());
        user.setName("张三");
        user.setPhone("1880177");
        int id = userService.add(user);
        
       return id;
    }
        
    /**
     * 功能描述:查找全部用户
     * 这里和下面是直接调用跳过Servise层,直接到DAO层
     */
    @GetMapping("findAll")
    public Object findAll(){
        
       return userMapper.getAll();
    }
    
    /**
     * 查找单个用户
     */
    @GetMapping("find_by_id")
    public Object findById(long id){
       return userMapper.findById(id);
    }
    
    /**
     * 删除单个用户
     */
    @GetMapping("del_by_id")
    public Object delById(long id){
    userMapper.delete(id);
       return "";
    }
    
    /**
     *更新用户
     */
    @GetMapping("update")
    public Object update(String name,int id){
        User user = new User();
        user.setName(name);
        user.setId(id);
        userMapper.update(user);
        return "";
    }        
}

测试

1.准备好数据库数据:

#Sql脚本
CREATE TABLE `user` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(128) DEFAULT NULL COMMENT '名称',
              `phone` varchar(16) DEFAULT NULL COMMENT '用户手机号',
              `create_time` datetime DEFAULT NULL COMMENT '创建时间',
              `age` int(4) DEFAULT NULL COMMENT '年龄',
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

2测试结果

在这里插入图片描述

插入用户,看后台的sql语句

在这里插入图片描述

posted @ 2023-05-11 14:22  鹤冲天Brody  阅读(4)  评论(0编辑  收藏  举报  来源