对于网上的好多代码就是直接复制粘贴的,也不清楚那些复制粘贴的博主真的搞懂了没,里面好多都是错的,浪费了我好多时间。 首先讲一下子SSM框架编写程序的顺序 SSM 是指 Springboot+mybatis+mysql (博主这里是用的开发工具是idea) 一般编写程序的顺序是: entity—>dao------>service(serviceImpl)---->controller 在ssm框架中使用mybatis可以直接反向生成entity和dao 接下来就是怎样具体的实现mybatis反向生成entity与dao的过程
在创建框架之前建议先在idea当中安装 idea-mybatis-generator
名称自己设置 这里你自己可以自己选择,会自动给你添加相应的依赖,博主个人建议不要轻易让系统自己安装,因为可能与本地的版本等不相匹配 然后next,自己设置个名字,然后finish,项目就建成了
我这里测试springboot项目建成
说明:程序启动默认的是8080端口,这里8099端口是自己设置的,在applicatin.properties里面设置 server.port=8099
在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
在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>双击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>会出现这种问题,首先不要上来就百度,要仔细看自己的错误以及分析一下子,是在没思路上百度收,我这个错误的原因是没有建表
5.0版本和8.0版本区别还是蛮大的,两个数据库如果配置错误,会有 sqlSession错误,对于5.0版本的driverClass="com.mysql.jdbc.Driver" 8.0版本的driverClass="com.mysql.cj.jdbc.Driver"