IDEA 中使用MyBatis-generator 自动生成MyBatis代码
写在前面:
公司一直都是使用ssh框架(struts2,spring,hibernate)来开发,但是现在外面的公司大多数都是使用的ssm框架,所以也有必要多学习一下外面的新技术。这里就快速搭建一个小的demo来入门了解一下。
ssm的分别表示:springmvc、spring、mybatis。
由于只是想快速搭建一个ssm框架,所以这里也没有对springmvc、spring、mybatis的概念以及内部原理去做过多的深究,因为个人觉得还是要先学会使用*。一开始就去看一些太多理念或者原理,也不会很理解,当然了,理念的东西在开始做之前还是要稍微的了解一下的。
比如就要知道springmvc对应着ssh中的struts2,都是web层,主要用于接收用户发送的请求,与给予响应。
再者就是spring,它是一个大大的容器,用来管理各种实体类,以及配置数据库事务等。它的两大特性主要是ioc与aop。
ioc:inversion of control,控制反转,让spring容器去管理装载bean,即把java类的初始化交给spring容器去执行,需要用时直接引用。
aop:aspect oriented programming,面向切面编程。通过动态代理或cglib代理把重复的具有相同功能的代码横向独立出来或横向插入。
图中可以看到方法1,方法2,方法3中都有相同的代码a,b,把代码a,b提取出来,只留下不同的代码。将代码a,b进行统一管理。
面向切面场景举例:事务管理
现在有两个方法,方法一:开启事务,更新表里的数据,提交事务;方法二:开启事务,删除表里面的数据,提交事务。
代码是伪代码,也是借用斌哥做的ppt上的图。这两个方法都有相同的功能代码(开启事务,提交事务)。将事务开启,与事务的提交单独抽取出来,然后统一管理。这就是aop的作用。
最后,mytabis是一个持久层框架,它可以使用简单的xml文件或注解来配置和映射原生信息,将接口(mapper层)和java的pojos(plain old java objects,普通的java对象)映射成数据库中的记录。它是可以直接在xml文件里写sql语句的。
与之都是orm(object relational mapping,对象关系映射)框架的hibernate,却是使得程序员可以直接以面向对象的方式来操纵数据库,一般使用hql语句,虽然也可以使用sql语句,但是使用sql语句的灵活度不如mybatis。两者的区别也不是几句话就能说清楚的,但是基本的还是要了解。
对三个框架有个基本的认知后,下面就开始整合。这里使用maven来创建web项目,这里如何创建就不细说了可以参考之前的博客。
准备工作:
首先我们需要创建数据库,并创建对应的表,这里只创建一个简单的测试表,然后插入一条数据。
drop table if exists `user_t`; create table `user_t` ( `id` int(11) not null auto_increment, `user_name` varchar(40) not null, `password` varchar(255) not null, `age` int(4) not null, primary key (`id`) ) engine=innodb auto_increment=2 default charset=utf8; /*data for the table `user_t` */ insert into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'蚊子','abcd',23);
然后将对应所需要的一些文件夹,包名都建好。
开始ssm整合:
1.使用maven引入所需jar包
pom.xml配置文件
<properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <!-- spring版本号 --> <spring.version>4.0.2.release</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.2.6</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.11</version> <!-- 表示开发的时候引入,发布的时候不会加载此包 --> <scope>test</scope> </dependency> <!-- spring核心包 --> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-oxm</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-tx</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-aop</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context-support</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-test</artifactid> <version>${spring.version}</version> </dependency> <!-- mybatis核心包 --> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version>1.2.2</version> </dependency> <!-- 导入java ee jar 包 --> <dependency> <groupid>javax</groupid> <artifactid>javaee-api</artifactid> <version>7.0</version> </dependency> <!-- 导入mysql数据库链接jar包 --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.30</version> </dependency> <!-- 导入dbcp的jar包,用来在applicationcontext.xml中配置数据库 --> <dependency> <groupid>commons-dbcp</groupid> <artifactid>commons-dbcp</artifactid> <version>1.2.2</version> </dependency> <!-- jstl标签类 --> <dependency> <groupid>jstl</groupid> <artifactid>jstl</artifactid> <version>1.2</version> </dependency> <!-- 日志文件管理包 --> <!-- log start --> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>${log4j.version}</version> </dependency> <!-- 格式化对象,方便输出日志 --> <dependency> <groupid>com.alibaba</groupid> <artifactid>fastjson</artifactid> <version>1.1.41</version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-api</artifactid> <version>${slf4j.version}</version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- 引入js--> <dependency> <groupid>org.codehaus.jackson</groupid> <artifactid>jackson-mapper-asl</artifactid> <version>1.9.13</version> </dependency> <!-- 上传组件包 --> <dependency> <groupid>commons-fileupload</groupid> <artifactid>commons-fileupload</artifactid> <version>1.3.1</version> </dependency> <dependency> <groupid>commons-io</groupid> <artifactid>commons-io</artifactid> <version>2.4</version> </dependency> <dependency> <groupid>commons-codec</groupid> <artifactid>commons-codec</artifactid> <version>1.9</version> </dependency> </dependencies>
配置好后,点击右侧的maven projects,点击重新导入按钮,等待引入相关的jar包。
2.配置spring与mybatis的整合
首先配置jdbc.properties
jdbc.driverclass = com.mysql.jdbc.driver
jdbc.url = jdbc:mysql://localhost:3306/ssm?createdatabaseifnotexist=true&useunicode=true&characterencoding=utf8
jdbc.username = root
jdbc.password = 123456
建立spring-mybatis.xml文件并配置,此文件是完成spring与mybatis整合的配置文件
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描 --> <context:component-scan base-package="com.ssm" /> <!--加载jdbc配置文件--> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="${jdbc.driverclass}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialsize" value="0"></property> <!-- 连接池最大数量 --> <property name="maxactive" value="20"></property> <!-- 连接池最大空闲 --> <property name="maxidle" value="20"></property> <!-- 连接池最小空闲 --> <property name="minidle" value="1"></property> <!-- 获取连接最大等待时间 --> <property name="maxwait" value="60000"></property> </bean> <!-- spring和mybatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="datasource" ref="datasource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperlocations" value="classpath:mapping/*.xml"></property> </bean> <!-- dao接口所在包名,spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <property name="basepackage" value="com.ssm.dao" /> <property name="sqlsessionfactorybeanname" value="sqlsessionfactory"></property> </bean> <!-- (事务管理)transaction manager, use jtatransactionmanager for global tx --> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource" /> </bean> </beans>
3.配置spring-mvc.xml
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描该包,使springmvc认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.ssm.controller "/> <!--避免ie执行ajax时,返回json出现下载文件 --> <bean id="mappingjacksonhttpmessageconverter" class="org.springframework.http.converter.json.mappingjacksonhttpmessageconverter"> <property name="supportedmediatypes"> <list> <value>text/html;charset=utf-8</value> </list> </property> </bean> <!-- 启动springmvc的注解功能,完成请求和注解pojo的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter"> <property name="messageconverters"> <list> <ref bean="mappingjacksonhttpmessageconverter" /> <!-- json转换器 --> </list> </property> </bean> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.internalresourceviewresolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/web-inf/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <!-- <bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver"> <!– 默认编码 –> <property name="defaultencoding" value="utf-8" /> <!– 文件大小最大值 –> <property name="maxuploadsize" value="10485760000" /> <!– 内存中的最大值 –> <property name="maxinmemorysize" value="40960" /> </bean>--> </beans>
4.配置web.xml文件
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>archetype created web application</display-name> <!-- spring和mybatis的配置文件 --> <context-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> </context-param> <!-- 编码过滤器 --> <filter> <filter-name>encodingfilter</filter-name> <filter-class>org.springframework.web.filter.characterencodingfilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- spring监听器 --> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <!-- 防止spring内存溢出监听器 --> <listener> <listener-class>org.springframework.web.util.introspectorcleanuplistener</listener-class> </listener> <!-- spring mvc servlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class> <init-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app>
5.log4j的配置,(这里就不再贴对应的配置文件了),让其能在控制台输出信息,如果需要可以去查看之前的资料
到这一步,所需要的配置文件已经全部配置完毕。目录结构图如下:
6.使用mybatis generator自动创建代码
这个可以用写好的配置文件,根据数据库表来自动的创建对应的实体类,对应的mapping.xml文件以及对应的mapper接口(dao层)。
第一步,首先在pom.xml文件中添加插件mybatis-generator-maven-plugin
<plugin> <groupid>org.mybatis.generator</groupid> <artifactid>mybatis-generator-maven-plugin</artifactid> <version>1.3.2</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin>
第二步,在src/main/resources 目录下建立名为 generatorconfig.xml的配置文件,作为mybatis-generator-maven-plugin 插件的执行目标,模板如下:
<?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="d:\my_maven_local_repository\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar"/> <context id="db2tables" targetruntime="mybatis3"> <commentgenerator> <property name="suppressdate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressallcomments" value="true"/> </commentgenerator> <!--数据库链接url,用户名、密码 --> <jdbcconnection driverclass="com.mysql.jdbc.driver" connectionurl="jdbc:mysql://localhost:3306/ssm" userid="root" password="123456"> </jdbcconnection> <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制--> <javatyperesolver> <property name="forcebigdecimals" value="false"/> </javatyperesolver> <!-- 生成模型的包名和位置 targetpackage 指定生成的model生成所在的包名 targetproject 指定在该项目下所在的路径 --> <javamodelgenerator targetpackage="com.ssm.bean" 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的包名和位置--> <javaclientgenerator type="xmlmapper" targetpackage="com.ssm.dao" targetproject="src/main/java"> <property name="enablesubpackages" value="true"/> </javaclientgenerator> <!-- 要生成的表 tablename是数据库中的表名或视图名 domainobjectname是实体类名--> <table tablename="user_t" domainobjectname="user" enablecountbyexample="false" enableupdatebyexample="false" enabledeletebyexample="false" enableselectbyexample="false" selectbyexamplequeryid="false"></table> </context> </generatorconfiguration>
第三步,在intellij idea添加一个“run运行”选项,使用maven运行mybatis-generator-maven-plugin插件 :
其中command line输入的是 mybatis-generator:generate -e
如果添加成功,则会在run 选项中有“generator” 选项,如下:
然后点击运行,如果运行成功的话,会在控制台看到build success,如果有错误的话,由于添加了-e 选项,会把具体的详细错误信息打印出来的,根据错误信息修改即可。
这时你的目录下面就多了刚自动创建生成的文件了
这里要特别注意下,最好是将xxxmapper.xml文件放在resources路径下,因为在测试的时候我把自动生成的mapper.xml文件放在src/main/java下一直扫描不到.所以这里最好注意下。对应的参考连接
7.到这里我们就可以去编写代码啦,首先我们,编写业务层的代码
userservice接口
public interface userservice { public user getuserbyid(int id); }
userserviceimpl.java
@service("userservice") public class userserviceimol implements userservice{ //引入mapper接口 @resource private usermapper usermapper; @override public user getuserbyid(int id) { //这里调用的方法是与usermapper.xml文件中对应的id名是一致的 return usermapper.selectbyprimarykey(id); } }
8.编写对应的controller层的代码
@controller("usercontroller") @requestmapping("/user") public class usercontroller { //引入service接口 @resource private userservice userservice; @requestmapping("/showuser") public string test(httpservletrequest request, model model){ string id = request.getparameter("id"); user user = userservice.getuserbyid(integer.parseint(id)); model.addattribute("user",user); return "showuser"; } }
9.编写对应的jsp页面,这里简单的测试下showuser.jsp
<%@ page contenttype="text/html;charset=utf-8" language="java" %> <html> <head> <title>测试</title> </head> <body> ${user.username} </body> </html>
10.部署项目,启动,在浏览器地址栏输入:http://localhost:8080/ssmdemo/user/showuser?id=1 回车,可以看到,出现名字,成功啦~~~~
到这里ssm三大框架的快速整合就完成了,对于使用generator插件自动生成的代码,可以自己下去生成看看对应的内容,这里就不再把代码贴上来了 。
这里附上完整的项目结构目录:
还有值得注意的是,对于jdbc文件的配置,在参考资料的时候,写的是username,前面没有加jdbc,这个时候会报错的,因为会变成系统管理员的名字,所以这里也要注意下。
参考资料:
------ssm框架——详细整合教程(spring+springmvc+mybatis)
------idea 中使用mybatis-generator 自动生成mybatis代码
------spring boot 整合mybatis org.apache.ibatis.binding.bindingexception: invalid bound state
还有也要看看斌哥附上的学习资料
推荐阅读
-
Intellij IDEA中使用MyBatis-generator 自动生成MyBatis代码
-
MyBatis代码自动生成器Mybatis-Generator使用教程
-
IDEA 中使用MyBatis-generator 自动生成MyBatis代码
-
SpringBoot项目使用mybatis-plus逆向自动生成全套代码
-
Mybatis-generator代码生成工具自动生成model,dao,mapper代码
-
使用MyBatis-Generator如何自动生成映射文件
-
MyBatis使用Generator自动生成代码
-
使用Mybatis Generator自动生成Mybatis相关代码
-
使用MyBatis Generator自动生成代码
-
Maven插件方式使用MyBatis-Generator自动生成代码