创建一个Maven项目不用选择骨架直接Next即可。
导入依赖:MyBatis-plus(3.1.1)、Mysql驱动包、数据库连接池(Druid)、lombok(简化代码工具包)、junit(单元测试),slf4j(日志工具)、以及修改JDK版本的插件。
<packaging>jar</packaging> <!--Mybatis-plus--> <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- jdk1.8 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>编写全局的Mybatis配置文件在resources文件夹下,如果新创建的子module文件夹不是对应的source root文件夹或者不是resource文件夹需要进行手动的设置。下面是具体设置的操作图以及Mybatis全局配置文件mybatis-config.xml文件的内容。
mybatis-config.xml配置文件中的内容,mapper中配置的映射配置文件我创建在了与mybatis-config.xml文件夹同级的目录所以不需要在加上文件夹路径。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- mybatis的主配置文件 --> <configuration> <!-- 配置环境 --> <environments default="mysql"> <!-- 配置mysql的环境--> <environment id="mysql"> <!-- 配置事务的类型--> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源(连接池) --> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_plus"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration> 创建数据库对应的实体类:由于使用了lombok插件所以简化了代码,不用写setter和getter方法以及toString方法。还可以使用注解生成空参构造和全参构造; @Data @NoArgsConstructor @AllArgsConstructor public class User { private Long id; private String name; private Integer age; private String email; private Long managerId; private Date createTime; } 编写UserMapper接口,定义里面的查询全部的抽象方法findAll; public interface UserMapper { List<User> findAll(); } 编写UserMapper映射配置文件: <?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"> <!--namespace中写上对应的Mapper接口所在位置--> <mapper namespace="com.lyp.mapper.UserMapper"> <!--resultType中写上对应返回值类型--> <select id="findAll" resultType="com.lyp.pojo.User"> select * from user; </select> </mapper> 在test中编写测试类进行测试: public class MybatisTest { @Test public void testFindAll() throws IOException { InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); SqlSession sqlSession = factory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.findAll(); userList.forEach(System.out::println); } }在Mybatis中整合Mybatis-Plus插件;
**第一步:**将UserMapper继承BaseMapper,将拥有BaseMapper中定义的所有方法:
/** * 使用Mybatis-Plus的方式进行查询 */ public interface UserMapper extends BaseMapper<User> { // List<User> findAll(); }
**第二步:**使用MP中的MybatisSqlSessionFactoryBuilder进行构建:
@Test public void testFindAll() throws IOException { InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactoryBuilder builder = new MybatisSqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); SqlSession sqlSession = factory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); /*由于需要查询全部并且没有查询条件只需要传递一个null即可*/ List<User> userList = userMapper.selectList(null); userList.forEach(System.out::println); } **注意事项:**当我们数据库的表名称和实体类的名称不是一一对应的时候,将会报错。解决办法:使用@TableName(“数据表名称”) 。引入Spring框架,数据源、构建工作就交给了Spring管理了。
2. 选择初始装备
在前面,了解了通过继承BaseMapper就可以获取到各种各样的单表操作,接下来就是详细的使用这些操作:
在MP中通过@Table注解可以指定字段的一些属性,常常解决的问题有两个:
对象的属性名称和字段名称不一致的问题(非驼峰); @tableField(value = 数据库中的实际字段)对象的属性字段在表中不存在的问题。@tableField(exist = false)查询时不返回该字段的值@tableField(select = false) @Data @NoArgsConstructor @AllArgsConstructor public class User { //如果需要设置主键id增长策略 // @TableId(type = IdType.AUTO) // 设置主键自增 private Long id; private String name; // 当不想将某个字段查询出来的时候可以使用 @TableField(select = false) private Integer age; // 当实体类的属性名称与数据库的字段名称不一致的使用可以使用@TableField(value = 数据库中字段的名称) @TableField(value = "email") private String mail; private Long managerId; private Date createTime; // 当某个字段在数据库中不存在的时候需要进行声明 @TableField(exist = false) private String address; }在MP中,更新操作有两种,一种是根据id更新,另一种是根据条件进行更新;
1. 方法定义:
blic void updateByIdTest() { User user = new User(); user.setId(123456L); user.setAge(166); user.setMail("123@Gmal.com"); int result = userMapper.updateById(user); System.out.println("====================" + result + "=================="); }**1. 方法定义:使用对象set的方式 **
/** * 根据条件进行更新 */ @Test public void updateByWrapper() { User user = new User(); user.setAge(1000); user.setMail("1000@Gmail.com"); QueryWrapper<User> wrapper = new QueryWrapper<User>(); wrapper.eq("manager_id","1087982257332887553"); int result = userMapper.update(user, wrapper); System.out.println(result); }**2. 方法定义:在条件中set数据库字段对应的值 **
/** * 根据条件进行更新的操作02 */ @Test public void updateByWrapper02() { UpdateWrapper<User> wrapper = new UpdateWrapper<User>(); wrapper.set("age", 100).set("email", "666888@qq.com") // 需要更新的字段 .eq("manager_id", "1087982257332887553");// 更新的条件 int result = userMapper.update(null, wrapper); System.out.println("=======操作结果========" + result); }。。。。。
Mybatis配置文件位置,如果您有单独的Mybatis配置,请将其路径配置到configLocation中,MybatisConfiguration的具体内容请参考Mybatis官方文档;
SpringBoot中的配置 :
# 配置Mybatis-Plus额外的配置文件 指定全局配置文件 # mybatis-plus.config-location=classpath:mybatis-config.xmlMybatis别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在Mapper对应的xml文件中可以直接使用类名,而不用使用全限定的类名(即XML调用的时候不包含包名)。
Springboot:
# 配置别名包扫描路径 ; 实体对象的扫描包 mybatis-plus.type-aliases-package=com.lyp.pojol文件的位置
#classpath之后有 * 表示 可以扫描所有依赖中的classpath下的xml文件 如果没有*表示只扫描当前resources下的xml #指定mapper.xml文件的位置 mybatis-plus.mapper-locations=classpath*:mybatis/*.xml 在Mapper接口中新增方法findById User findById(Long id); 编写测试用例进行测试 /** * 测试自定义的findById */ @Test public void testFindById() { User user = userMapper.findById(123456L); System.out.println(user); }Mybatis别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在Mapper对应的xml文件中可以直接使用类名,而不用使用全限定的类名(即XML调用的时候不包含包名)。
[外链图片转存中…(img-Ehri7Xcp-1593581578416)]
Springboot:
# 配置别名包扫描路径 ; 实体对象的扫描包 mybatis-plus.type-aliases-package=com.lyp.pojo