MyBatis(七) Maven工程问题与MyBatis Generator
上一章将一般的Maven工程转换为了Web工程,主要是为了说明两个问题:
- MyBatis在DAO层中Mapper的动态代理
- 在Web工程中使用MyBatis
但是有反馈说从头开始创建Maven结构的Web工程,在IDEA上有很多问题,针对这个情况,这一张我们就从头开始直接创建一个Web工程
而且在后面还介绍了一个常用的MyBatis工具Generator,可以直接帮我们生成DAO层所需要的java文件
一.创建Maven结构的Web工程
再次点击 Finish
就能帮我们创建好一个基于Maven的Web工程
二.解决IDEA上Maven结构Web工程的问题
创建好工程之后会弹出下面的通知提示,建议像下面这样选择
但是,现在我们的Maven工程还有一定的问题
这个需要我们自己在工程结构中自己配置一下
然后自己手动创建Maven工程需要的文件夹,如下:
但是并不是创建文件夹之后就完事了,每个文件夹都有对应的功能,这个主要是为了工程在编译的时候把相应的文件放在合适的位置
因此,我们还需要标识每个文件夹的功能
src/main/java : Sources java源文件夹
src/main/resources : Resources 项目资源文件夹
src/test/java : Tests 项目测试文件夹
src/test/resources: Test Resources 测试资源文件夹
右键点击文件夹,为每个文件夹标识合适的功能,标识之后就会变成下面这个样子
三.Tomcat的配置
这里的内容实际在上一章已经介绍过,不过这里集中再介绍一下
1.下载Tomcat
要在IDEA中配置Tomcat,当然你自己机器本地需要先下载一个Tomcat,下载过程就不再多说了,自己去下载就OK了
2.在全局配置中设置Application Server
3.工程配置Tomcat
打开运行配置: 添加本地Tomcat Server: Tomcat添加项目资源:
设置访问上下文:
设置Tomcat访问路径以及热部署:
在工程中添加Java Web相关jar包: 这里主要是Servlet,jsp的相关依赖包,这些jar包本来就在Tomcat的lib路径中,所以可以直接从Tomcat中引入.
下面是直接从Tomcat引入的IDEA配置:
当然也可以通过Maven下载的方式找到这几个jar包.
<!-- 引入servlet的jar包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!-- 引入jsp的jar包 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!-- 引入JSTL的jar包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
注意1:两种方式你选择一种就可以了!不然的话会有jar包冲突
这样Tomcat与你的项目在IDEA上基本就已经部署好了,我们可以运行一下这个空项目测试一下
注意2:如果要在jsp页面使用EL表达式,在IDEA中默认使用maven建立的webapp工程是不支持的
如果要让jsp页面支持EL表达式,修改方式很简单,改一下web.xml中的声明就好了,因为默认生成的web.xml声明是web-app2.3版本的,而web-app2.5之后才支持EL表达式,所以,工程建立好之后,直接先将web.xml改成下面的样子就可以了,我这里是copy了一个4.0的声明,反正web-app2.5版本之后的声明其实都可以
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>Archetype Created Web Application</display-name>
</web-app>
四.使用MyBatis Generator
现在Web工程已经建好了,但是毕竟是一个新项目,相当于Dao,Service,Controller这些我们还是得从头来,首先是Dao层,难道我们那些Mapper.xml文件还要再写一次吗?其实没必要,每张表的增删改查操作大体都差不多,所以,MyBatis官方已经帮我们写了一个代码生成工具,可以通过数据库表直接生成实体类,Mapper接口与Mapper.xml文件
下面是使用步骤:
1.下载
你可以到MyBatis Generator GitHub站点去下载,当前最新版本是MyBatis Generator Release 1.3.7
2.需要用到的jar包和XML配置文件
要使用MyBatis Generator
,需要下面的这些内容
(1). mybatis-generator-core-1.3.7.jar
文件
(2). mysql数据库的jar文件mysql-connector-java-5.1.47.jar
(3). 配置文件
(4). 存放生成文件的文件夹
最好把这些东西都放在一个统一的路径下面,注意:路径不能有中文,就像下面这个样子:
这里最重要的就是xml文件,其实里面就定义了从数据库文件到java文件的映射
具体代码如下,下面代码都有具体的注释,其实主要不同的地方就是jar文件的位置,数据库地址和用户密码,生成表的名字和实体类名字,生成文件的位置,大家自己在用的时候,都能看懂哪里需要修改,如果你想了解每一个标签的具体意义,可以到官网 MyBatis GeneratorXML Configuration File Reference
<?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>
<!-- 数据库驱动包位置 -->
<!-- oracle -->
<!-- <classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" />-->
<!-- mysql -->
<classPathEntry location="/Users/yingside/mybatis/generator/mysql-connector-java-5.1.47.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 数据库链接URL、用户名、密码 -->
<!-- oracle -->
<!-- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="root" password="root"> -->
<!-- mysql -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3307/crm" userId="root" password="123456"></jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.yingside.model" targetProject="/Users/yingside/mybatis/generator/src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成的映射文件包名和位置 -->
<sqlMapGenerator targetPackage="com.yingside.mapper" targetProject="/Users/yingside/mybatis/generator/src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.yingside.dao" targetProject="/Users/yingside/mybatis/generator/src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
<table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
<table tableName="t_dept" domainObjectName="Dept" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
<table tableName="t_emp" domainObjectName="Employee" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
3. 运行生成java代码
你只需要在命令行中运行java命令来生成文件就行了,当然,首先的命令行路径应该在当前jar包的路径下
java -jar mybatis-generator-core-1.3.7.jar -configfile generator.xml -overwrite
这样你的Dao层代码,以及和数据库对应的实体类代码全部都自动生成了,当然,就像官方的说明一样,这个生成工具只能帮你生成最简单的,单表的CRUD操作,如果你需要复杂的,多表级联查询的sql操作,还是只有自己写...
比如,生成的UserMapper接口就是下面的这个样子
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}
UserMapper.xml
生成的就是与接口对应的基本的增删改查操作
如果,你实在觉得这样还是麻烦,下面这个工具还不错mybatis-generator-gui
其实他就是给上面的这些操作给套了一个GUI的界面,完全傻瓜式的操作,不过确定也很明显,一次就只能针对生成一张表,有兴趣的同学可以去试试
4.IDEA直接配置generater
(1)、配置generater maven运行插件,注意是在POM.xml文件的plugins标签中配置
</plugins>
<!--其他配置省略-->
<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>
</plugins>
2、放入generatorConfig文件
注意1:文件名不能修改 注意2:需要修改生成文件存放的路径地址
3、配置maven插件运行环境
5、运行
五、分页插件-pagehelper
1、POM文件导入jar包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
2、mybatis全局配置中设置分页拦截器
<!--配置分页的拦截器-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--配置你所使用的数据库-->
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
3、代码
分两步:
1、设置当前页码与每页显示数量
2、当获取的数据传入到PageInfo构造器请
public PageInfo<User> getPage(int pageNo, int pageSize) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//注意:这句话一定要放在读取数据的前面,才能实现拦截
PageHelper.startPage(pageNo,pageSize);
List<User> users = userMapper.getAll();
//将集合对象放入到PageInfo中
PageInfo<User> page = new PageInfo<User>(users);
sqlSession.close();
return page;
}
Comments