欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis框架的简单运用

程序员文章站 2022-07-11 08:33:33
一、配置流程 1.流程示意图(通过XML映射文件实现): 2.流程: 数据库驱动包(本文以MySQL为例):https://mvnrepository.com/artifact/mysql/mysql-connector-java Mybatis框架包:https://mvnrepository.c ......

一、配置流程

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

Mybatis框架的简单运用

2.流程:

2.1 导入包:
2.1.1 下载包

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

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

Mybatis框架的简单运用

 

2.1.2 导入程序

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

  Mybatis框架的简单运用

选中jar包,右键build path->add to build path,结果如图,jar包已加载进程序内

Mybatis框架的简单运用

 

2.2 添加规则文件

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

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

Mybatis框架的简单运用

 

规则文件的key:官方文档内ctrl+f查找public:

 Mybatis框架的简单运用

Mybatis框架的简单运用

 

 

选择window->preferences

Mybatis框架的简单运用

Mybatis框架的简单运用

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

 

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

在src文件下创建xml文件,填写文件名为mybatisconfig.xml,然后next:

Mybatis框架的简单运用

选择dtd文件,然后next,

Mybatis框架的简单运用

 

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

 

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

 

2.4 映射文件和映射接口

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

Mybatis框架的简单运用

创建一个映射文件,

<?xml version="1.0" encoding="utf-8"?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.zwj.mapper.studentmapper">
    <!-- #{}类似于?(预处理块),与pojo中的变量名对应 -->
    <insert id="insert">
        insert into tb_student (student_name, student_pwd, student_status, create_date, student_account) values (#{studentname}, #{studentpwd}, #{studentstatus}, #{createdate}, #{studentaccount})
    </insert>
</mapper>
1 package cn.zwj.mapper;
2 
3 import cn.zwj.pojo.student;
4 
5 public interface studentmapper {
6     int insert(student student);
7 }

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

 

2.5 pojo
 1 import java.io.serializable;
 2 import java.util.date;
 3 
 4 public class student implements serializable{
 5     private static final long serialversionuid = -9125884258413809899l;
 6     public long studentid;//bigint(20) not null auto_increment comment '学生编号',
 7     public string studentname;//varchar(50) null default null comment '姓名',
 8     public string studentpwd;//varchar(50) null default null comment '密码',
 9     public integer studentstatus;//int(11) null default null comment '状态',
10     public date createdate;//datetime null default null comment '创建时间',
11     public string studentaccount;//varchar(50) null default null comment '学生帐号',
12     public long getstudentid() {
13         return studentid;
14     }
15     public void setstudentid(long studentid) {
16         this.studentid = studentid;
17     }
18     public string getstudentname() {
19         return studentname;
20     }
21     public void setstudentname(string studentname) {
22         this.studentname = studentname;
23     }
24     public string getstudentpwd() {
25         return studentpwd;
26     }
27     public void setstudentpwd(string studentpwd) {
28         this.studentpwd = studentpwd;
29     }
30     public integer getstudentstatus() {
31         return studentstatus;
32     }
33     public void setstudentstatus(integer studentstatus) {
34         this.studentstatus = studentstatus;
35     }
36     public date getcreatedate() {
37         return createdate;
38     }
39     public void setcreatedate(date createdate) {
40         this.createdate = createdate;
41     }
42     public string getstudentaccount() {
43         return studentaccount;
44     }
45     public void setstudentaccount(string studentaccount) {
46         this.studentaccount = studentaccount;
47     }
48 }

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

 

2.6 会话构建工具类
 1 import java.io.ioexception;
 2 import java.io.reader;
 3 
 4 import org.apache.ibatis.io.resources;
 5 import org.apache.ibatis.session.sqlsession;
 6 import org.apache.ibatis.session.sqlsessionfactory;
 7 import org.apache.ibatis.session.sqlsessionfactorybuilder;
 8 
 9 public class mybatisutils {
10     //对外只开放一个工厂
11     public static final sqlsessionfactory ssf = createsqlsessionfactory();
12     //声明一个线程变量
13     public static final threadlocal<sqlsession> thread_local = new threadlocal<>();
14     
15     //1.获得会话工厂
16     private static sqlsessionfactory createsqlsessionfactory() {
17         try {
18             //读取配置文件
19             reader reader = resources.getresourceasreader("mybatisconfig.xml");
20             //创建会话工厂构建类对象
21             sqlsessionfactorybuilder builder = new sqlsessionfactorybuilder();
22             //构建会话工厂
23             return builder.build(reader);
24         } catch (ioexception e) {
25             // todo auto-generated catch block
26             e.printstacktrace();
27         }
28         return null;
29     }
30     
31     //2.获得会话
32     public static sqlsession getsession() {
33         if (thread_local.get() == null) {
34             sqlsession session = ssf.opensession();
35             thread_local.set(session);
36         }
37         return thread_local.get();
38     }
39     
40     public static void close() {
41         if (thread_local.get() != null) {
42             sqlsession session = thread_local.get();
43             session.close();
44             thread_local.remove();
45         }
46     }
47 }

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

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

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

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

 

2.7.测试
 1 import org.apache.ibatis.session.sqlsession;
 2 import org.junit.test;
 3 
 4 import cn.zwj.mapper.studentmapper;
 5 import cn.zwj.pojo.student;
 6 import cn.zwj.utils.mybatisutils;
 7 
 8 public class studenttest {
 9     @test
10     public void test1() {
11         //获得会话
12         sqlsession session = mybatisutils.getsession();
13         //构建映射接口 的动态对象
14         studentmapper studentmapper = session.getmapper(studentmapper.class);
15         student student = new student();
16         student.setstudentname("张三1");
17         int insert = studentmapper.insert(student);
18         system.out.println(insert);
19         //提交事务
20         session.commit();
21         mybatisutils.close();
22     }
23 }

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

 

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

Mybatis框架的简单运用

2.8.2 修改代码:
 1 import org.apache.ibatis.annotations.insert;
 2 import org.apache.ibatis.annotations.options;
 3 
 4 import cn.zwj.pojo.student;
 5 
 6 public interface studentmapper {
 7     @insert("insert into tb_student (student_name, student_pwd, student_status, create_date, student_account) values (#{studentname}, #{studentpwd}, #{studentstatus}, #{createdate}, #{studentaccount})")
 8     @options(usegeneratedkeys = true, keyproperty = "studentid")
 9     //@options:注解声明生成主键
10     int insert(student student);
11 }
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!doctype configuration public "-//mybatis.org//dtd config 3.0//en" "mybatis-3-config.dtd" >
 3 <configuration>
 4     <environments default="sms">
 5         <environment id="sms">
 6             <transactionmanager type="jdbc"></transactionmanager>
 7             <datasource type="pooled">
 8                 <property name="driver" value="org.gjt.mm.mysql.driver"/>
 9                 <property name="url" value="jdbc:mysql://localhost:3306/sms"/>
10                 <property name="username" value="root"/>
11                 <property name="password" value="12345"/>
12             </datasource>
13         </environment>
14     </environments>
15         <!-- 修改映射文件为映射接口-->
16     <mappers>
17         <mapper class="cn.zwj.mapper.studentmapper"></mapper>
18     </mappers>
19 </configuration>

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