经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
Mybatis框架的简单运用
来源:cnblogs  作者:敲个锤子  时间:2019/4/29 9:14:05  对本文有异议

一、配置流程

1.流程示意图(通过XML映射文件实现):

2.流程:

2.1 导入包:
2.1.1 下载包

  数据库驱动包(本文以MySQL为例):https://mvnrepository.com/artifact/mysql/mysql-connector-java

  Mybatis框架包:https://mvnrepository.com/artifact/org.mybatis/mybatis

 

2.1.2 导入程序

将jar包放入程序新建的文件夹

  

选中jar包,右键Build Path->Add to Build Path,结果如图,jar包已加载进程序内

 

2.2 添加规则文件

规则文件的位置:①\mybatis-3.4.1\org\apache\ibatis\builder\xml

        ②打开上面下载的Mybatis框架文件夹,查找dtd

 

规则文件的Key:官方文档内Ctrl+F查找public:

 

 

 

选择Window->Preferences

 点击OK,重复上面的操作,完成添加Mapper规则文件。

 

2.3.编写配置文件
2.3.1 创建XML文件

在src文件下创建XML文件,填写文件名为MybatisConfig.xml,然后Next:

选择DTD文件,然后Next,

 

选择创建配置文件,然后Next->FInish,创建成功。

 

2.3.2 编写文件
  1. 1 <?xml version="1.0" encoding="UTF-8"?>
  2. 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
  3. 3 <configuration>
  4. 4 <!--environments标签用于配置数据库连接信息,可以配置多个数据库的连接信息
  5. 5 default属性:环境集里面可以配置多个数据库连接环境,但是必须要指定默认的环境,指定的是环境environment标签的ID
  6. 6 -->
  7. 7 <environments default="sms">
  8. 8 <!-- environment环境标签 ,用于配置一个数据库连接的信息-->
  9. 9 <environment id="sms">
  10. 10 <!--指定使用的事务类型
  11. 11 JDBC : 使用JDBC的事务处理
  12. 12 MANAGER: 不需要事务处理
  13. 13 -->
  14. 14 <transactionManager type="JDBC"></transactionManager>
  15. 15 <!--dataSource标签:配置数据库连接信息
  16. 16 type:配置数据源的类型
  17. 17 JNDI :使用JNDI数据源,就是在web服务器配置数据源,让程序调用
  18. 18 POOLED 使用默认内置的连接池
  19. 19 UNPOOLED:使用直连数据库,不需要连接池
  20. 20 -->
  21. 21 <dataSource type="POOLED">
  22. 22 <!-- 连接四要素 -->
  23. 23 <property name="driver" value="org.gjt.mm.mysql.Driver"/>
  24. 24 <property name="url" value="jdbc:mysql://localhost:3306/sms"/>
  25. 25 <property name="username" value="root"/>
  26. 26 <property name="password" value="12345"/>
  27. 27 </dataSource>
  28. 28 </environment>
  29. 29 </environments>
  30. 30 <!-- 配置指定加载的映射文件 -->
  31. 31 <mappers>
  32. 32 <mapper class="cn.zwj.mapper.StudentMapper"></mapper>
  33. 33 </mappers>
  34. 34 </configuration>
MybatisConfig.xml

 

2.4 映射文件和映射接口

因为映射文件和映射接口要向对应,所以使用相同命名表示他们的对应关系,在多映射文件中可以很好找到相对应的接口

创建一个映射文件,

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
  3. <mapper namespace="cn.zwj.mapper.StudentMapper">
  4. <!-- #{}类似于?(预处理块),与POJO中的变量名对应 -->
  5. <insert id="insert">
  6. INSERT INTO tb_student (STUDENT_NAME, STUDENT_PWD, STUDENT_STATUS, CREATE_DATE, STUDENT_ACCOUNT) VALUES (#{studentName}, #{studentPwd}, #{studentStatus}, #{createDate}, #{studentAccount})
  7. </insert>
  8. </mapper>
StudentMapper.xml
  1. 1 package cn.zwj.mapper;
  2. 2
  3. 3 import cn.zwj.pojo.Student;
  4. 4
  5. 5 public interface StudentMapper {
  6. 6 int insert(Student student);
  7. 7 }
StudentMapper.java

 通过XML中的<mapper>标签的namespace属性,来绑定对应的接口,<insert>标签的id属性值为借口中的方法名

 

2.5 POJO
  1. 1 import java.io.Serializable;
  2. 2 import java.util.Date;
  3. 3
  4. 4 public class Student implements Serializable{
  5. 5 private static final long serialVersionUID = -9125884258413809899L;
  6. 6 public Long studentId;//bigint(20) not null auto_increment comment '学生编号',
  7. 7 public String studentName;//varchar(50) null default null comment '姓名',
  8. 8 public String studentPwd;//varchar(50) null default null comment '密码',
  9. 9 public Integer studentStatus;//int(11) null default null comment '状态',
  10. 10 public Date createDate;//datetime null default null comment '创建时间',
  11. 11 public String studentAccount;//varchar(50) null default null comment '学生帐号',
  12. 12 public Long getStudentId() {
  13. 13 return studentId;
  14. 14 }
  15. 15 public void setStudentId(Long studentId) {
  16. 16 this.studentId = studentId;
  17. 17 }
  18. 18 public String getStudentName() {
  19. 19 return studentName;
  20. 20 }
  21. 21 public void setStudentName(String studentName) {
  22. 22 this.studentName = studentName;
  23. 23 }
  24. 24 public String getStudentPwd() {
  25. 25 return studentPwd;
  26. 26 }
  27. 27 public void setStudentPwd(String studentPwd) {
  28. 28 this.studentPwd = studentPwd;
  29. 29 }
  30. 30 public Integer getStudentStatus() {
  31. 31 return studentStatus;
  32. 32 }
  33. 33 public void setStudentStatus(Integer studentStatus) {
  34. 34 this.studentStatus = studentStatus;
  35. 35 }
  36. 36 public Date getCreateDate() {
  37. 37 return createDate;
  38. 38 }
  39. 39 public void setCreateDate(Date createDate) {
  40. 40 this.createDate = createDate;
  41. 41 }
  42. 42 public String getStudentAccount() {
  43. 43 return studentAccount;
  44. 44 }
  45. 45 public void setStudentAccount(String studentAccount) {
  46. 46 this.studentAccount = studentAccount;
  47. 47 }
  48. 48 }
Student.java

与数据库中的一个表对应的实体类,实现set/get方法

 

2.6 会话构建工具类
  1. 1 import java.io.IOException;
  2. 2 import java.io.Reader;
  3. 3
  4. 4 import org.apache.ibatis.io.Resources;
  5. 5 import org.apache.ibatis.session.SqlSession;
  6. 6 import org.apache.ibatis.session.SqlSessionFactory;
  7. 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. 8
  9. 9 public class MybatisUtils {
  10. 10 //对外只开放一个工厂
  11. 11 public static final SqlSessionFactory SSF = createSqlSessionFactory();
  12. 12 //声明一个线程变量
  13. 13 public static final ThreadLocal<SqlSession> THREAD_LOCAL = new ThreadLocal<>();
  14. 14
  15. 15 //1.获得会话工厂
  16. 16 private static SqlSessionFactory createSqlSessionFactory() {
  17. 17 try {
  18. 18 //读取配置文件
  19. 19 Reader reader = Resources.getResourceAsReader("MybatisConfig.xml");
  20. 20 //创建会话工厂构建类对象
  21. 21 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  22. 22 //构建会话工厂
  23. 23 return builder.build(reader);
  24. 24 } catch (IOException e) {
  25. 25 // TODO Auto-generated catch block
  26. 26 e.printStackTrace();
  27. 27 }
  28. 28 return null;
  29. 29 }
  30. 30
  31. 31 //2.获得会话
  32. 32 public static SqlSession getSession() {
  33. 33 if (THREAD_LOCAL.get() == null) {
  34. 34 SqlSession session = SSF.openSession();
  35. 35 THREAD_LOCAL.set(session);
  36. 36 }
  37. 37 return THREAD_LOCAL.get();
  38. 38 }
  39. 39
  40. 40 public static void close() {
  41. 41 if (THREAD_LOCAL.get() != null) {
  42. 42 SqlSession session = THREAD_LOCAL.get();
  43. 43 session.close();
  44. 44 THREAD_LOCAL.remove();
  45. 45 }
  46. 46 }
  47. 47 }
MybatisUtils.java

为什么只对外开放一个工厂?

答:因为如果出现多个数据源,数据库的连接就可能来自于不同的数据源!导致数据库连接无法同步,从而导致事务失效!

为什么要声明一个线程变量?

答:同访问的一条线程,获得的会话是相同的,实现线程安全

 

2.7.测试
  1. 1 import org.apache.ibatis.session.SqlSession;
  2. 2 import org.junit.Test;
  3. 3
  4. 4 import cn.zwj.mapper.StudentMapper;
  5. 5 import cn.zwj.pojo.Student;
  6. 6 import cn.zwj.utils.MybatisUtils;
  7. 7
  8. 8 public class StudentTest {
  9. 9 @Test
  10. 10 public void test1() {
  11. 11 //获得会话
  12. 12 SqlSession session = MybatisUtils.getSession();
  13. 13 //构建映射接口 的动态对象
  14. 14 StudentMapper studentMapper = session.getMapper(StudentMapper.class);
  15. 15 Student student = new Student();
  16. 16 student.setStudentName("张三1");
  17. 17 int insert = studentMapper.insert(student);
  18. 18 System.out.println(insert);
  19. 19 //提交事务
  20. 20 session.commit();
  21. 21 MybatisUtils.close();
  22. 22 }
  23. 23 }
Test.java

当控制台输出一个大于0的数字,表示成功实现运用mybatis框架操作数据库

 

2.8 修改为注解实现
2.8.1 流程示意图:

2.8.2 修改代码:
  1. 1 import org.apache.ibatis.annotations.Insert;
  2. 2 import org.apache.ibatis.annotations.Options;
  3. 3
  4. 4 import cn.zwj.pojo.Student;
  5. 5
  6. 6 public interface StudentMapper {
  7. 7 @Insert("INSERT INTO tb_student (STUDENT_NAME, STUDENT_PWD, STUDENT_STATUS, CREATE_DATE, STUDENT_ACCOUNT) VALUES (#{studentName}, #{studentPwd}, #{studentStatus}, #{createDate}, #{studentAccount})")
  8. 8 @Options(useGeneratedKeys = true, keyProperty = "studentId")
  9. 9 //@Options:注解声明生成主键
  10. 10 int insert(Student student);
  11. 11 }
StudentMapper.java
  1. 1 <?xml version="1.0" encoding="UTF-8"?>
  2. 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
  3. 3 <configuration>
  4. 4 <environments default="sms">
  5. 5 <environment id="sms">
  6. 6 <transactionManager type="JDBC"></transactionManager>
  7. 7 <dataSource type="POOLED">
  8. 8 <property name="driver" value="org.gjt.mm.mysql.Driver"/>
  9. 9 <property name="url" value="jdbc:mysql://localhost:3306/sms"/>
  10. 10 <property name="username" value="root"/>
  11. 11 <property name="password" value="12345"/>
  12. 12 </dataSource>
  13. 13 </environment>
  14. 14 </environments>
  15. 15 <!-- 修改映射文件为映射接口-->
  16. 16 <mappers>
  17. 17 <mapper class="cn.zwj.mapper.StudentMapper"></mapper>
  18. 18 </mappers>
  19. 19 </configuration>
MybatisConfig.xml

删除映射文件,然后测试代码。

 

原文链接:http://www.cnblogs.com/zwj-blog1/p/10786287.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号