mybatis反向生成dao与entity
吐槽
对于网上的好多代码就是直接复制粘贴的,也不清楚那些复制粘贴的博主真的搞懂了没,里面好多都是错的,浪费了我好多时间。
首先讲一下子SSM框架编写程序的顺序
SSM 是指 Springboot+mybatis+Spring(博主这里是用的开发工具是idea)
一般编写程序的顺序是:
entity—>dao------>service(serviceImpl)---->controller
在ssm框架中使用mybatis可以直接反向生成entity和dao
接下来就是怎样具体的实现mybatis反向生成entity与dao的过程
1.安装idea-mybatis-generator
在创建框架之前建议先在idea当中安装 idea-mybatis-generator
2.创建springboot项目
名称自己设置
这里你自己可以自己选择,会自动给你添加相应的依赖,博主个人建议不要轻易让系统自己安装,因为可能与本地的版本等不相匹配
然后next,自己设置个名字,然后finish,项目就建成了
3.可以检查一下springboot项目是否建成
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
@RequestMapping("/")
public String getMag() {
return "hello word ";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
我这里测试springboot项目建成
说明:程序启动默认的是8080端口,这里8099端口是自己设置的,在applicatin.properties里面设置 server.port=8099
4. 配置mybatis
4.1 在pom.xml中添加mybatis依赖
在dependencies中添加依赖
<!--mysql数据库连接依赖-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--管理我们的mysql连接-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!-- mybatis-generator-core 反向生成java代码-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<!--springboot对mybatis的支持-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
在 plugins中添加
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>mybatis generator</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!--允许移动生成的文件-->
<verbose>true</verbose>
<!--允许自动覆盖文件-->
<overwrite>false</overwrite>
<configurationFile>
src/main/resources/mybatis-generator.xml
</configurationFile>
</configuration>
</plugin>
4.2
在application.properties中进行配置mybatis
#mybatis
mybatis.mapperLocations=classpath:mapping/*.xml
6. 建立数据库以及在数据库里面建表
7.建立mybatis生成代码文件
在src/main/resources里面建xml文件,这个xml文件十分重要是,mybatis生成代码的xml文件,我这里的命名是:
mybatis-generator.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">
<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mydb" userId="root" password="123456">
</jdbcConnection>
<!--生成DataObject类存放位置-->
<javaModelGenerator targetPackage="com.example.ibatisdo.demo.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成Dao类存放位置-->
<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.ibatisdo.demo.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--生成对应表及类名-->
<table tableName="user" domainObjectName="UserDO" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
8.配置数据库
#mysql
spring.datasource.name=springboot_mtbatis
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
#使用druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
使用mybatis-generator进行反向生成dao,entity,*mapper.xml文件
双击mybatis-generator:generate 实现反向生成,下图是运行日志
10
展示一下子反向生成的结果图,以及附上反向生成的代码
自动生成的dao:
package com.example.ibatisdo.demo.dao;
import com.example.ibatisdo.demo.entity.UserDO;
public interface UserDOMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table user
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table user
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
int insert(UserDO record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table user
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
int insertSelective(UserDO record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table user
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
UserDO selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table user
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
int updateByPrimaryKeySelective(UserDO record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table user
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
int updateByPrimaryKey(UserDO record);
}
自动生成的entity:
package com.example.ibatisdo.demo.entity;
public class UserDO {
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.id
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
private Integer id;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column user.name
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
private String name;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column user.id
*
* @return the value of user.id
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
public Integer getId() {
return id;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column user.id
*
* @param id the value for user.id
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
public void setId(Integer id) {
this.id = id;
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column user.name
*
* @return the value of user.name
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
public String getName() {
return name;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column user.name
*
* @param name the value for user.name
*
* @mbg.generated Sat Oct 03 20:46:06 CST 2020
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
}
自动生成的UserDoMapper:
<?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.example.ibatisdo.demo.dao.UserDOMapper">
<resultMap id="BaseResultMap" type="com.example.ibatisdo.demo.entity.UserDO">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
id, name
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
select
<include refid="Base_Column_List" />
from user
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
delete from user
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.example.ibatisdo.demo.entity.UserDO">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
insert into user (id, name)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.example.ibatisdo.demo.entity.UserDO">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.example.ibatisdo.demo.entity.UserDO">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
update user
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.example.ibatisdo.demo.entity.UserDO">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sat Oct 03 20:46:06 CST 2020.
-->
update user
set name = #{name,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
11.对于初学者可能会犯的几个错误
11.1 数据库没有配置对
11.2 数据库里面没有建表
会出现这种问题,首先不要上来就百度,要仔细看自己的错误以及分析一下子,是在没思路上百度收,我这个错误的原因是没有建表
11.3 注意数据库版本
5.0版本和8.0版本区别还是蛮大的,两个数据库如果配置错误,会有 sqlSession错误,对于5.0版本的driverClass="com.mysql.jdbc.Driver"
8.0版本的driverClass="com.mysql.cj.jdbc.Driver"