1.添加pom
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itlinli</groupId>
<artifactId>springboot-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.配置文件
server.port=8056
#其他的版本可以在mybais配置文件中配置数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#在xml中的resultMap对应着此包下的entity(pojo)
mybatis.type-aliases-package=com.itlinli.entity
#配置mapper.xml的文件路径
mybatis.mapper-locations= classpath:mapper/*Mapper.xml
#开启二级缓存
mybatis.configuration.cache-enabled=true
#开启控制台打印sql
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.entity类
@Data //没安装lombok的生成get和set方法
@Alias("t_user") //数据库表名
public class User {
private Integer id;
private String userName;
private Integer age;
private String passWord;
}
4.dao层
@Mapper
@Repository
public interface UserDao {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
User queryById(Integer id);
/**
* 查询指定行数据
*
* @param offset 查询起始位置
* @param limit 查询条数
* @return 对象列表
*/
List<User> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);
/**
* 通过实体作为筛选条件查询
*
*
* @return 对象列表
*/
List<User> queryAll();
/**
* 新增数据
*
* @param user 实例对象
* @return 影响行数
*/
int insert(User user);
/**
* 修改数据
*
* @param user 实例对象
* @return 影响行数
*/
int update(User user);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 影响行数
*/
int deleteById(Integer id);
}
5.service层
package com.itlinli.service;
import com.itlinli.entity.User;
import java.util.List;
public interface UserService {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
User queryById(Integer id);
/**
* 查询多条数据
*
* @param offset 查询起始位置
* @param limit 查询条数
* @return 对象列表
*/
List<User> queryAllByLimit(int offset, int limit);
/**
* 新增数据
*
* @param user 实例对象
* @return 实例对象
*/
void insert(User user);
/**
* 修改数据
*
* @param user 实例对象
* @return 实例对象
*/
void update(User user);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
boolean deleteById(Integer id);
List<User> queryAll();
}
6.实现层Impl
package com.itlinli.service.impl;
import com.itlinli.dao.UserDao;
import com.itlinli.entity.User;
import com.itlinli.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Override
public User queryById(Integer id) {
User user = userDao.queryById(id);
return user;
}
@Override
public List<User> queryAllByLimit(int offset, int limit) {
List<User> userList = userDao.queryAllByLimit(offset, limit);
return userList;
}
@Override
public void insert(User user) {
userDao.insert(user);
}
@Override
public void update(User user) {
userDao.update(user);
}
@Override
public boolean deleteById(Integer id) {
return this.userDao.deleteById(id) > 0;
}
@Override
public List<User> queryAll() {
return userDao.queryAll();
}
}
7.在resource目录下添加mapper目录,添加UserMapper.xml
<?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标签中的:
namespance属性是名称空间,一般取值有两种:
第一种:javaBean的全类名
第二种:JavaBean对应的Dao接口(Mapper接口)的全类名
-->
<mapper namespace="com.itlinli.dao.UserDao">
<!--配置查询返回的结果集 id:为结果集的名字,为了在下面的select标签中resultMap="xxx"使用,
type:为返回的entity类的全名称
-->
<resultMap id="UserMap" type="com.itlinli.entity.User">
<!--column:为数据库对应的字段名 property:为entity中的属性名
jdbcType:为数据库中的类型,千万别写成javaType了。
注意:username和属性userName区分大小写的。在占位符中的userName一定要
按照属性中的大小写来写。
-->
<result column="id" property="id" jdbcType="INTEGER"></result>
<result column="username" property="userName" jdbcType="VARCHAR"></result>
<result column="age" property="age" jdbcType="INTEGER"></result>
<result column="password" property="passWord" jdbcType="VARCHAR"></result>
</resultMap>
<!--根据id查询返回结果集-->
<select id="queryById" resultMap="UserMap">
select
id, username, age, password
from t_user where id= #{id}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="UserMap">
select
id, username, age, password
from t_user
limit #{offset}, #{limit}
</select>
<!--通过实体作为筛选条件查询-->
<select id="queryAll" resultMap="UserMap">
select
id, username, age, password
from t_user
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="userName != null and userName != ''">
and username = #{userName}
</if>
<if test="age != null">
and age = #{age}
</if>
<if test="passWord!=null and passWord != ''">
password =#{passWord}
</if>
</where>
</select>
<!--新增所有列 resultType:设置返回的主键的类型
keyProperty 设置返回的id注入到哪个属性中
useGeneratedKeys:开启id自增
-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into t_user(username, age, password)
values (#{userName}, #{age}, #{passWord})
</insert>
<!--通过主键修改数据-->
<update id="update">
update t_user
<set>
<if test="userName != null and userName != ''">
username = #{userName},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="passWord!=null and passWord != ''">
password =#{passWord}
</if>
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from t_user where id = #{id}
</delete>
</mapper>
8.Spring测试类测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMybatisApplicationTests {
@Autowired
UserService userService;
@Test
public void contextLoads() {
/* User user = userService.queryById(1);
System.out.println(user);*/
/* User user = new User();
user.setUserName("lizhs1");
user.setAge(24);
user.setPassWord("88888");
userService.insert(user);*/
/* List<User> users = userService.queryAllByLimit(1, 2);
System.out.println(users);*/
/* List<User> users = userService.queryAll();
System.out.println(users);*/
/* User user = new User();
user.setUserName("王五");
user.setAge(23);
user.setPassWord("123456");
user.setId(3);
userService.update(user);*/
boolean b = userService.deleteById(3);
System.out.println(b);
}
9.创表sql
CREATE TABLE `t_user` (
`id` int(16) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`password` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
10.逆向工程,在resource目录下创建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="E:\Mevan\repository\mysql\mysql-connector-Java\8.0.16\mysql-connector-java-8.0.16.jar"/>
<!--
targetRuntime 属性设置你生成的版本
MyBatis3 豪华版
MyBatis3Simple 标准版本 CRUD
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- JavaBean 实现 序列化 接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<!-- 生成toString -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<!-- optional,旨在创建class时,对注释进行控制 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- <property name="suppressAllComments" value="true"/>-->
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
userId="root"
password="root">
</jdbcConnection>
<!-- 类型转换 -->
<javaTypeResolver >
<!-- 是否使用bigDecimal,
false: 把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer(默认)
true: 把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
-->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.itlinli.entity" targetProject="src/main/java">
<!-- 默认false 是否允许子包 -->
<property name="enableSubPackages" value="true" />
<!-- <!– 默认false 是否对model添加 构造函数 –>
<property name="constructorBased" value="false"/>
<!– 默认false 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 –>
<property name="immutable" value="false"/>-->
<!-- 默认false 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--
sqlMapGenerator 配置生成SQL的Mapper.xml配置文件
-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--
javaClientGenerator 配置生成Mapper接口
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.itlinli.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--
一个表,对应一个table标签
tableName 数据库表名
domainObjectName 生成对应的javaBean的类名
-->
<table tableName="t_user" domainObjectName="User"></table>
</context>
</generatorConfiguration>
11.添加依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itlinli</groupId>
<artifactId>springboot-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!--mybatis逆向工程-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--mybatis逆向工程-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<overwrite>true</overwrite>
<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
12.spring测试类中测试
@Test
public void test() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("generatorConfig.xml");//路径自行选择
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}