1.properties文件写入数据库连接
spring.datasource.username=root spring.datasource.password= spring.datasource.url=jdbc:mysql://localhost:3306/t2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
2.创建实体类
@Data //lombok插件--代表生成getset方法 @TableName(value = "user") //指定对应的数据库 public class User { //@TableField注解表示如果数据库列名和实体类属性名字不一样的话需要指定 //@TableName注解表示如果数据库名字和实体类名字不一样的话需要指定 // @TableId指定主键生成策略AUTO自动增长 @TableId(type = IdType.AUTO) @TableField("id") private Integer id; @TableField("name") private String name; @TableField("score") private Integer score; @TableField("sex") private int sex; @TableField("date") private String date; @Version //代表这是一个乐观锁 private Integer version; // @TableLogic //逻辑删除注解 private int del; @TableField("password") private String password; @TableField("prems") private String prems; }
3.创建一个mapper包创建一个UserMapper接口---继承BaseMapper<User>里面有很多自带的增删改查方法
//BaseMapper<User> User对应你要使用的实体类 public interface UserMapper extends BaseMapper<User> { }
4.在控制器中把接口导入过来
@RunWith(SpringRunner.class) @Controller class UserController{ @Resource //表示该bean交由spring容器来管理,一般情况下会将resource写在类或者接口的实现类上---和@Autwrie注解作用相似 private UserMapper userMapper; //接口--继承了BaseMapper<> }
5.方法的使用---根据id查询
public String contextLoads(int id) {//根据id查询 //自带的查询方法 User user=userMapper.selectById(id); //接口点方法,这些方法自带的,返回一个实体类 return "index" }
6.复杂查询的使用
public void contextLoads2() {//条件查询 //查询专用QueryWrapper-----增删改专用UpdateWrapper //User是你要查询的实体类 QueryWrapper<User> wrapper=new QueryWrapper<User>(); //第一个参数字段名,后面的字段是属性---还可以设置多个条件,具体可以参考MyBatis-Plus官方文档 wrapper.eq("name","曹雨") .like("password","%2%"); List<User>list=userMapper.selectList(wrapper); System.out.println(list.size()); }
7.修改的使用
//修改 void Update(){ User user=new User(); user.setId(47); //根据这个id进行修改 user.setName("曹某"); //修改的内容 int i=userMapper.updateById(user); //自带的方法 System.out.println(i+"..................."); }
8.乐观锁的使用,防止多线程增删改时数据被覆盖
8.1.创建一个config包里面创建一个配置类
@EnableTransactionManagement //开启事务 @MapperScan("com.li.mapper") //扫描Mapper的包 @Configuration //代表这是一个配置类 public class MyBatisPlusConfig { //注册乐观锁插件 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor(){ return new OptimisticLockerInterceptor(); }
8.2.成功的乐观锁
//测试成功乐观锁 public void testOpen(){ //查询用户 User user = userMapper.selectById(47); //修改用户 user.setName("李某"); user.setScore(8888); //执行更新操作 int i=userMapper.updateById(user); System.out.println(".............."+i); }
8.2.失败的乐观锁
//测试失败乐观锁 多线程下 public void testOpen1(){ //线程1 User user = userMapper.selectById(47); user.setName("李某9"); user.setScore(8888); //模拟线程2 User user1 = userMapper.selectById(47); user1.setName("李某2"); user1.setScore(8888); userMapper.updateById(user); //自旋锁多次尝试提交 userMapper.updateById(user1); //没有没有乐观锁就会覆盖插队线程的值 }
9.分页查询---在config配置类里面增加下面的代码
@EnableTransactionManagement //开启事务 //@MapperScan("com.li.mapper") //扫描Mapper的包 @Configuration //代表这是一个配置类 public class MyBatisPlusConfig { //分页 @Bean //交给spring托管 public PaginationInnerInterceptor paginationInnerInterceptor(){ return new PaginationInnerInterceptor(); }
9.1.在控制器中写以下代码
public void fy(){ //user是你的实体类 QueryWrapper<User>wrapper=new QueryWrapper<User>(); wrapper.eq("score",99); //查询条件---可以设置多个条件 //分页对象:查询获得分数为99的用户,查看第一页数据,每页显示2条记录 Page<User>page=new Page<>(1,2); //需要两个参数,page第一个分页规格,wrapper是查询出来的内容 IPage<User> userAdminPage=userMapper.selectPage(page,wrapper); System.out.println("总记录"+userAdminPage.getTotal()); System.out.println("总页数"+userAdminPage.getPages()); System.out.println("当前页数"+userAdminPage.getCurrent()); System.out.println("每页记录数"+userAdminPage.getSize()); for(User userAdmin:userAdminPage.getRecords()){ //获得查询的记录 System.out.println("分数"+userAdmin.getScore()); } }
10.配置文件中配置以下log4j可以在控制台打印SQL语句
logging.level.root=warn
logging.level.com.li.mapper=trace
logging.pattern.console=%p%m%n
11.所需要的依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
浙公网安备 33010602011771号