目录
2.1在标签中添加如下内容:至于为什么因为后面generatorConfig.xml文件会用到${entity.target.dir}和${dao.resources.dir}
3.在src/main/resources文件中添加generatorConfig.xml文件
5.controller,service,serviceimpl,DeptMapper,Mapper.xml以及主类如下
1.新建模块或项目
选择依赖:
1.Web -->spring web starter
2.SQL -->Mysql Driver,JDBC API,Mybatis framework
如下图:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2.修改pom.xml
2.1在<properties>标签中添加如下内容:至于为什么因为后面generatorConfig.xml文件会用到${entity.target.dir}和${dao.resources.dir}
<entity.target.dir>src/main/java/</entity.target.dir>
<dao.resources.dir>src/main/resources/</dao.resources.dir>
2.2在<plugins>标签中添加如下内容
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!-- 是否覆盖,true表示会替换生成的JAVA文件,false则不覆盖 -->
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
</plugin>
3.在src/main/resources文件中添加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>
<context id="DB2Tables" targetRuntime="MyBatis3" defaultModelType="flat">
<plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
<property name="searchString" value="[e|E]xample$" />
<property name="replaceString" value="Criteria" />
</plugin>
<commentGenerator>
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--*******************1.连接数据库,需要修改************************-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test" userId="root"
password="666666">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--*******************2.需要修改targetPackage实体所在包************************-->
<javaModelGenerator targetPackage="com.mqb.providerdept.entity"
targetProject="${entity.target.dir}">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--*******************3.需要修改targetPackage为mapper.xml生成位置************************-->
<sqlMapGenerator targetPackage="mapper"
targetProject="${dao.resources.dir}" >
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--*******************4.需要修改targetPackage为mapper接口的包************************-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.mqb.providerdept.mapper"
targetProject="${entity.target.dir}">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--*******************5.需要修改表名和对应类名************************-->
<table tableName="dept" domainObjectName="Dept" enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
</context>
</generatorConfiguration>
我的工程结构(注意:截图是最终结构,可以按照这个结构来构建):
数据库表设计:
CREATE TABLE `dept` (
`dept_id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`db_source` varchar(30) NOT NULL,
PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
接下来我们配置完pom.xml后打开maven project。可以看到多了一个插件,点击即可逆向生产相应代码
一共生成三类文件 :entity,mapper接口和mapper.xml文件,如下:
4.application.properties文件配置
server.port=80
##mybatis路径配置。注意config-locations路径之间用/
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=classpath:com.mqb.providerdept.entity
##数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=666666
logging.level.com.example.mapper=debug
5.controller,service,serviceimpl,DeptMapper,Mapper.xml以及主类如下
5.1DeptController.java
package com.mqb.providerdept.controller;
import com.mqb.providerdept.entity.Dept;
import com.mqb.providerdept.service.DeptService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
@Controller
public class DeptController {
private static final Logger log = LoggerFactory.getLogger(DeptController.class);
@Resource
private DeptService deptService;
@RequestMapping("/getDept/{id}")
@ResponseBody
public Dept getDept(@PathVariable("id") Long deptId){
System.out.println(deptId);
return deptService.getDeptById(deptId);
}
}
5.2DeptService
package com.mqb.providerdept.service;
import com.mqb.providerdept.entity.Dept;
public interface DeptService {
public Dept getDeptById(Long deptId);
}
5.3DeptServiceImpl
package com.mqb.providerdept.service.impl;
import com.mqb.providerdept.entity.Dept;
import com.mqb.providerdept.mapper.DeptMapper;
import com.mqb.providerdept.service.DeptService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class DeptServiceImpl implements DeptService{
@Resource
private DeptMapper deptMapper;
@Override
public Dept getDeptById(Long deptId) {
System.out.println(deptId);
Dept dept = new Dept();
dept=deptMapper.selectByPrimaryKey(deptId);
System.out.println(dept);
return dept;
}
}
5.4主类(记得添加mapperScan注解)
@SpringBootApplication
@MapperScan("com.mqb.providerdept.mapper")
public class SpringCloudProviderDeptApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudProviderDeptApplication.class, args);
}
}
5.5DeptMapper
package com.mqb.providerdept.mapper;
import com.mqb.providerdept.entity.Dept;
import org.apache.ibatis.annotations.Select;
public interface DeptMapper {
int deleteByPrimaryKey(Long deptId);
int insert(Dept record);
int insertSelective(Dept record);
Dept selectByPrimaryKey(Long deptId);
int updateByPrimaryKeySelective(Dept record);
int updateByPrimaryKey(Dept record);
}
5.6DeptMapper.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 namespace="com.mqb.providerdept.mapper.DeptMapper">
<resultMap id="BaseResultMap" type="com.mqb.providerdept.entity.Dept">
<id column="dept_id" jdbcType="BIGINT" property="deptId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="db_source" jdbcType="VARCHAR" property="dbSource" />
</resultMap>
<sql id="Base_Column_List">
dept_id, name, db_source
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from dept
where dept_id = #{deptId,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from dept
where dept_id = #{deptId,jdbcType=BIGINT}
</delete>
<insert id="insert" parameterType="com.mqb.providerdept.entity.Dept">
insert into dept (dept_id, name, db_source
)
values (#{deptId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{dbSource,jdbcType=VARCHAR}
)
</insert>
<insert id="insertSelective" parameterType="com.mqb.providerdept.entity.Dept">
insert into dept
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="deptId != null">
dept_id,
</if>
<if test="name != null">
name,
</if>
<if test="dbSource != null">
db_source,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="deptId != null">
#{deptId,jdbcType=BIGINT},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="dbSource != null">
#{dbSource,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.mqb.providerdept.entity.Dept">
update dept
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="dbSource != null">
db_source = #{dbSource,jdbcType=VARCHAR},
</if>
</set>
where dept_id = #{deptId,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.mqb.providerdept.entity.Dept">
update dept
set name = #{name,jdbcType=VARCHAR},
db_source = #{dbSource,jdbcType=VARCHAR}
where dept_id = #{deptId,jdbcType=BIGINT}
</update>
</mapper>
6.测试
浏览器输入:localhost:80/getDept/1
7.总结
7.1项目搭建思路和步骤:
1.配置好generatorConfig.xml文件和设计数据库
2.maven project--generator生成entity,mapper接口,mapper.xml文件。
3.配置application.properties文件:端口,mybatis相关配置,数据源配置
4.controller,service,serviceImpl和主类添加@MapperScan()注解
7.2注意:
和mapper有关的配置一共有三个
1.主类的@MapperScan()注解
2.application.properties中mybatis.mapper-locations配置
3.mapper.xml中namespace标签
容易搞混的是1和3。1是所有mapper接口所在的包,而3中namespace是指这个mapper.xml对应的mapper接口,是一个类的全路径。所以这三者不一样,缺一不可。
7.3spring boot如何找到各种类和接口
controller:类:@controller注解。方法:@RequestMapping注解(经常和@ResponseBody搭配)。
service接口:被serviceImpl实现。
serviceImpl:类:@Service注解。在controller中使用@Autowired或@Resource注解注入该类的对象。
mapper接口:通过主类的@MapperScan注解定位。在serviceImpl中也是使用@Autowired或@Resource注解注入对象。
mapper.xml:application.propertie的mybatis.mapper-locations配置确定了所有mapper.xml的范围,接下来在这个范围中查找namespace匹配mapper接口全路径的mapper.xml并执行相应的sql语句。