Mybatis3.x与Spring4.x整合
一、搭建开发环境
1.1、使用Maven创建Web项目
执行如下命令:
mvnarchetype:create-DgroupId=me.gacl-DartifactId=spring4-mybatis3-DarchetypeArtifactId=maven-archetype-webapp-DinteractiveMode=false
复制代码
1 2xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
34.0.0
4me.gacl
5spring4-mybatis3
6war
71.0-SNAPSHOT
8spring4-mybatis3MavenWebapp
9http://maven.apache.org
10
11
12junit
13junit
143.8.1
15test
16
17
18
19spring4-mybatis3
20
21
复制代码
修改spring4-mybatis3MavenWebapp部分,把"MavenWebapp"这部分包含空格的内容去掉,否则Maven在编译项目时会因为空格的原因导致一些莫名其妙的错误出现,修改成:spring4-mybatis3。
另外,把以下内容删掉:
1
2junit
3junit
43.8.1
5test
6
这部分是junit的jar包依赖信息,这个版本太低了,我们不使用这个Junit测试版本,修改过后的pom.xml内容如下:
复制代码
1 2xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
34.0.0
4me.gacl
5spring4-mybatis3
6war
71.0-SNAPSHOT
8spring4-mybatis3
9http://maven.apache.org
10
11
12
13
14spring4-mybatis3
15
16
复制代码
1.2、将创建好的项目导入MyEclipse中
二、创建数据库和表(针对MySQL)
SQL脚本如下:
复制代码
CreateDATABASEspring4_mybatis3;
USEspring4_mybatis3;
DROPTABLEIFEXISTSt_user;
CREATETABLEt_user(
user_idchar(32)NOTNULL,
user_namevarchar(30)DEFAULTNULL,
user_birthdaydateDEFAULTNULL,
user_salarydoubleDEFAULTNULL,
PRIMARYKEY(user_id)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
复制代码
创建好的数据库和表如下:
三、使用generator工具生成代码
在网上找到了一个generator工具可以根据创建好的数据库表生成MyBatis的表对应的实体类,SQL映射文件和dao,找到generator工具根目录下的generator.xml文件,这个文件是用来配置代码生成规则的,
编辑generator.xml文件,
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
复制代码
打开命令行窗口,切换到生成工具的根目录下,执行如下命令:
java-jarmybatis-generator-core-1.3.2.jar-configfilegenerator.xml-overwrite
如下图所示:
刚才我们在generator.xml文件中配置将生成的代码和SQL映射文件放到"C:\Users\gacl\spring4-mybatis3\src\main\java"这个目录下,这个目录就是我们的spring4-mybatis3项目所在目录,我们刷新一下src/main/java目录,就可以看到生成的代码和映射文件了,如下图所示:
生成的代码和映射文件一行都不用改,可以直接应用到项目当中。下面我们看一眼由generator工具生成的代码和映射文件:
1、生成的dao类
复制代码
1packageme.gacl.dao;
2
3importme.gacl.domain.User;
4
5publicinterfaceUserMapper{
6intdeleteByPrimaryKey(StringuserId);
7
8intinsert(Userrecord);
9
10intinsertSelective(Userrecord);
11
12UserselectByPrimaryKey(StringuserId);
13
14intupdateByPrimaryKeySelective(Userrecord);
15
16intupdateByPrimaryKey(Userrecord);
17}
复制代码
生成的UserMapper是一个接口,里面定义了一些操作t_user表的增删改查方法。
2、生成的实体类
复制代码
1packageme.gacl.domain;
2
3importjava.util.Date;
4
5publicclassUser{
6privateStringuserId;
7
8privateStringuserName;
9
10privateDateuserBirthday;
11
12privateDoubleuserSalary;
13
14publicStringgetUserId(){
15returnuserId;
16}
17
18publicvoidsetUserId(StringuserId){
19this.userId=userId==null?null:userId.trim();
20}
21
22publicStringgetUserName(){
23returnuserName;
24}
25
26publicvoidsetUserName(StringuserName){
27this.userName=userName==null?null:userName.trim();
28}
29
30publicDategetUserBirthday(){
31returnuserBirthday;
32}
33
34publicvoidsetUserBirthday(DateuserBirthday){
35this.userBirthday=userBirthday;
36}
37
38publicDoublegetUserSalary(){
39returnuserSalary;
40}
41
42publicvoidsetUserSalary(DoubleuserSalary){
43this.userSalary=userSalary;
44}
45}
复制代码
User类是t_user表的对应的实体类,User类中定义的属性和t_user表中的字段一一对应。
3、生成的SQL映射文件
复制代码
1
2
3
4
5
6
7
8
9
10
11user_id,user_name,user_birthday,user_salary
12
13
14select
15
16fromt_user
17whereuser_id=#{userId,jdbcType=CHAR}
18
19
20deletefromt_user
21whereuser_id=#{userId,jdbcType=CHAR}
22
23
24insertintot_user(user_id,user_name,user_birthday,
25user_salary)
26values(#{userId,jdbcType=CHAR},#{userName,jdbcType=VARCHAR},#{userBirthday,jdbcType=DATE},
27#{userSalary,jdbcType=DOUBLE})
28
29
30insertintot_user
31
32
33user_id,
34
35
36user_name,
37
38
39user_birthday,
40
41
42user_salary,
43
44
45
46
47#{userId,jdbcType=CHAR},
48
49
50#{userName,jdbcType=VARCHAR},
51
52
53#{userBirthday,jdbcType=DATE},
54
55
56#{userSalary,jdbcType=DOUBLE},
57
58
59
60
61updatet_user
62
63
64user_name=#{userName,jdbcType=VARCHAR},
65
66
67user_birthday=#{userBirthday,jdbcType=DATE},
68
69
70user_salary=#{userSalary,jdbcType=DOUBLE},
71
72
73whereuser_id=#{userId,jdbcType=CHAR}
74
75
76updatet_user
77setuser_name=#{userName,jdbcType=VARCHAR},
78user_birthday=#{userBirthday,jdbcType=DATE},
79user_salary=#{userSalary,jdbcType=DOUBLE}
80whereuser_id=#{userId,jdbcType=CHAR}
81
82
复制代码
UserMapper.xml这个文件的内容是编写操作t_user表的SQL语句,重点说一下UserMapper.xml配置中需要注意的几个小细节问题:
1、UserMapper.xml的标签的namespace必须是UserMapper接口的全类名,既
2、UserMapper.xml的定义操作数据库的
deletefromt_user
whereuser_id=#{userId,jdbcType=CHAR}
insertintot_user(user_id,user_name,user_birthday,
user_salary)
values(#{userId,jdbcType=CHAR},#{userName,jdbcType=VARCHAR},#{userBirthday,jdbcType=DATE},
#{userSalary,jdbcType=DOUBLE})
insertintot_user
user_id,
user_name,
user_birthday,
user_salary,
#{userId,jdbcType=CHAR},
#{userName,jdbcType=VARCHAR},
#{userBirthday,jdbcType=DATE},
#{userSalary,jdbcType=DOUBLE},
updatet_user
user_name=#{userName,jdbcType=VARCHAR},
user_birthday=#{userBirthday,jdbcType=DATE},
user_salary=#{userSalary,jdbcType=DOUBLE},
whereuser_id=#{userId,jdbcType=CHAR}
updatet_user
setuser_name=#{userName,jdbcType=VARCHAR},
user_birthday=#{userBirthday,jdbcType=DATE},
user_salary=#{userSalary,jdbcType=DOUBLE}
whereuser_id=#{userId,jdbcType=CHAR}
selectuser_id,user_name,user_birthday,user_salaryfromt_user
复制代码
4、在UserServiceI接口中也添加一个getAllUser()方法,如下:
复制代码
1packageme.gacl.service;
2
3importjava.util.List;
4
5importme.gacl.domain.User;
6
7publicinterfaceUserServiceI{
8
9/
10添加用户
11@paramuser
12/
13voidaddUser(Useruser);
14
15/
16根据用户id获取用户
17@paramuserId
18@return
19/
20UsergetUserById(StringuserId);
21
22/获取所有用户信息
23@returnList
24/
25ListgetAllUser();
26}
复制代码
5、在UserServiceImpl类中实现getAllUser方法,如下:
复制代码
1packageme.gacl.service.impl;
2
3importjava.util.List;
4
5importorg.springframework.beans.factory.annotation.Autowired;
6importorg.springframework.stereotype.Service;
7importme.gacl.dao.UserMapper;
8importme.gacl.domain.User;
9importme.gacl.service.UserServiceI;
10
11/
12@authorgacl
13使用@Service注解将UserServiceImpl类标注为一个service
14service的id是userService
15/
16@Service("userService")
17publicclassUserServiceImplimplementsUserServiceI{
18
19/
20使用@Autowired注解标注userMapper变量,
21当需要使用UserMapper时,Spring就会自动注入UserMapper
22/
23@Autowired
24privateUserMapperuserMapper;//注入dao
25
26@Override
27publicvoidaddUser(Useruser){
28userMapper.insert(user);
29}
30
31@Override
32publicUsergetUserById(StringuserId){
33returnuserMapper.selectByPrimaryKey(userId);
34}
35
36@Override
37publicListgetAllUser(){
38returnuserMapper.getAllUser();
39}
40}
复制代码
6、在src/main/java目录下创建一个me.gacl.web.controller包,然后在me.gacl.web.controller下创建一个UserServlet,如下:
复制代码
1packageme.gacl.web.controller;
2
3importjava.io.IOException;
4importjava.util.List;
5
6importjavax.servlet.ServletException;
7importjavax.servlet.annotation.WebServlet;
8importjavax.servlet.http.HttpServlet;
9importjavax.servlet.http.HttpServletRequest;
10importjavax.servlet.http.HttpServletResponse;
11
12importorg.springframework.context.ApplicationContext;
13importorg.springframework.web.context.support.WebApplicationContextUtils;
14
15importme.gacl.domain.User;
16importme.gacl.service.UserServiceI;
17
18/
19@authorgacl
20@WebServlet是Servlet3.0提供的注解,目的是将一个继承了HttpServlet类的普通java类标注为一个Servlet
21UserServlet使用了@WebServlet标注之后,就不需要在web.xml中配置了
22/
23@WebServlet("/UserServlet")
24publicclassUserServletextendsHttpServlet{
25
26//处理业务逻辑的userService
27privateUserServiceIuserService;
28
29publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
30throwsServletException,IOException{
31//获取所有的用户信息
32ListlstUsers=userService.getAllUser();
33request.setAttribute("lstUsers",lstUsers);
34request.getRequestDispatcher("/index.jsp").forward(request,response);
35}
36
37publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
38throwsServletException,IOException{
39this.doGet(request,response);
40}
41
42publicvoidinit()throwsServletException{
43//在Servlet初始化时获取Spring上下文对象(ApplicationContext)
44ApplicationContextac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
45//从ApplicationContext中获取userService
46userService=(UserServiceI)ac.getBean("userService");
47}
48}
复制代码
7、编辑index.jsp页面,用于展示查询到的用户信息,内容如下:
复制代码
<%@pagelanguage="java"pageEncoding="UTF-8"%>
<%--引入JSTL核心标签库--%>
<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
显示用户信息
table,td{
border:1pxsolid;
border-collapse:collapse;
}
用户ID |
用户名 |
用户生日 |
工资 |
<%--遍历lstUsers集合中的User对象--%>
${user.userId} |
${user.userName} |
${user.userBirthday} |
${user.userSalary} |
复制代码
|
|