Mybatis框架(三)逆向工程的使用
1.导入依赖和maven插件
在工程中找到maven的配置文件pom.xml,在pulgins节点中增加如下内容,即增加maven中对mybatis-generator的插件支持
mybatis-generator-core
mybatis-generator-maven-plugin
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>MybatisGenerator</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> </dependencies> <build> <resources> <!-- resources文件 --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> </plugin> </plugins> </build> </project>
2.Mybatis配置文件 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"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper class ="com.lyq.mapper.UserMapper"/> </mappers> </configuration>
3.逆向工程配置文件 generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包--> <classPathEntry location="C:\Users\ASUS\.m2\repository\mysql\mysql-connector-java\5.1.32\mysql-connector-java-5.1.32.jar"/> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接URL,用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成模型的包名和位置--> <javaModelGenerator targetPackage="com.lyq.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成映射文件的包名和位置--> <sqlMapGenerator targetPackage="com.lyq.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成Mapper的包名和位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.lyq.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名--> <table tableName="user"></table> </context> </generatorConfiguration>
3.对应的表结构
建表语句参考 【Mybatis框架入门】
4.对应的实体类UserVo
package com.lyq.entity; import com.lyq.model.User; public class UserVo { private int id; private String name; private String pwd; /** * 存储于数据库中的model(实体类)为持久层对象:Po; * 从前台传入的实体类对象为:Vo; * 对Vo存入数据库model中的过程,我们首先要将Vo转为Po(调用initDbValue()),然后再进行数据库存储; * Vo与Po的存在有利于解耦与理解,Vo用于传输实体类信息,可以显示数据库中表中不存在的字段; * UserVo为前台传入的实体类对象,userVo.initDbValue()之后:Vo转为Po; */ //① Vo转Po,当数据库中无对应Po时,new出一个Po public User initDbValue(){ User userPo = new User(); return initDbValue(userPo); } //② userVo.initDbValue()之后,userVo的值会set进Po(User)中,我们得到的就是一个和数据库完全对应的model public User initDbValue(User user){ if (user!=null){ user.setId(this.getId()); user.setName(this.getName()); user.setPwd(this.getPwd()); } return user; } public UserVo(){ }
//Po转Vo
//Vo与Po的互转:Po->Vo,将数据库的记录转为对应的实体类Vo用于前台展示,可在Vo类中创建构造方法
//Vo->Po,将前台的实体类转为数据库对应的Po用于持久化,可在Po类中创建构造方法(Po为逆向工程生成,不建议在Po类中改动),此外还可以在Vo类中创建initDbValue方法,通过vo.initDbValue方法完成Vo->Po
public UserVo (User user) {
this.setId(user.getId());
this.setName(user.getName());
this.setPwd(user.getPwd());
} public UserVo(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } 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 getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
5.项目结构
(mapper和model包是逆向工程自动生成的)
6.测试类
运行test,查看数据库,新增操作成功
import com.lyq.entity.UserVo; import com.lyq.mapper.UserMapper; import com.lyq.model.User; import org.junit.Before; import org.junit.Test; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public class Mytest { private SqlSessionFactory sqlSessionFactory = null; @Before public void init() throws Exception { // 1. 创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 2. 加载SqlMapConfig.xml配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 3. 创建SqlSessionFactory对象 this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); } @Test public void test() throws Exception { // 4. 创建SqlSession对象 //openSession():若括号里为true,则设置为事务自动提交。若不填则默认手动提交,将自动提交设置成false,然后调用sqlSession.commit()方法。 SqlSession sqlSession = sqlSessionFactory.openSession(true); //5.创建mapper,调用mapper里的方法 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //创建一个实体类Vo并增加其属性 UserVo userVo = new UserVo(); userVo.setId(6); userVo.setName("张三"); userVo.setPwd("123456"); //新增一个数据库model对象Po User user = new User(); //调用UserVo里的initDbValue方法,将Vo转为Po user = userVo.initDbValue(); //新增操作 userMapper.insertSelective(user); // 7. 释放资源 sqlSession.close(); } }