mybatis反向生成dao与entity

    科技2022-07-12  123

    mybatis反向生成dao与entity

    吐槽1.安装idea-mybatis-generator2.创建springboot项目3.可以检查一下springboot项目是否建成4. 配置mybatis4.1 在pom.xml中添加mybatis依赖在application.properties中进行配置mybatis 6. 建立数据库以及在数据库里面建表7.建立mybatis生成代码文件8.配置数据库使用mybatis-generator进行反向生成dao,entity,*mapper.xml文件展示一下子反向生成的结果图,以及附上反向生成的代码11.对于初学者可能会犯的几个错误11.1 数据库没有配置对11.2 数据库里面没有建表11.3 注意数据库版本

    吐槽

    对于网上的好多代码就是直接复制粘贴的,也不清楚那些复制粘贴的博主真的搞懂了没,里面好多都是错的,浪费了我好多时间。 首先讲一下子SSM框架编写程序的顺序 SSM 是指 Springboot+mybatis+mysql (博主这里是用的开发工具是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"

    Processed: 0.013, SQL: 8