配色: 字号:
Mybatis3
2016-08-30 | 阅:  转:  |  分享 
  
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;

}





















<%--遍历lstUsers集合中的User对象--%>

















用户ID用户名用户生日工资
${user.userId}${user.userName}${user.userBirthday}${user.userSalary}






复制代码

献花(0)
+1
(本文系thedust79首藏)