Mybatis框架的简单运用

一、配置流程

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 <?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>

MybatisConfig.xml

2.4 映射文件和映射接口

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

创建一个映射文件,

<?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>

StudentMapper.xml

1 package cn.zwj.mapper;
2
3 import cn.zwj.pojo.Student;
4
5 public interface StudentMapper {
6     int insert(Student student);
7 }

StudentMapper.java

通过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 }

Student.java

与数据库中的一个表对应的实体类,实现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 }

MybatisUtils.java

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

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

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

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

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 }

Test.java

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

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

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 }

StudentMapper.java

 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>

MybatisConfig.xml

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

原文地址:https://www.cnblogs.com/zwj-blog1/p/10786287.html

时间: 2024-11-09 03:45:41

Mybatis框架的简单运用的相关文章

mybatis框架的简单使用

1.1 创建工程并导入mybatis的jar文件 最基本的导入mybatis和connector的jar 1.2 编写MyBatis的配置文件 在src目录下创建一个叫mybatis.xml文件. 在这个文件中我们要配置MyBatis的工作的相关参数. 在MyBatis的配置文件中最核心的是JDBC连接数据库的四大参数项 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration

Java Web开发中Spring+MyBatis框架的简单搭建

这里使用的eclipse,首先创建一个动态web项目. 1.导入Spring IOC.AOP.DAO.dbcp.dbdrive.mybatis.jar . mybatis-spring.jar  本人使用的jar包和版本如下: aopalliance.jaraspectjweaver.jarcommons-dbcp-1.4.jarcommons-logging.jarcommons-pool-1.5.6.jarmybatis-3.2.5.jarmybatis-spring-1.2.2.jarmy

Mybatis框架的简单配置

Mybatis 的配置 1.创建项目(当然,这是废话) 2.导包 下载mybatis-3.2.0版:https://repo1.maven.org/maven2/org/mybatis/mybatis/ 下载commson-dbcp :http://maven.aliyun.com/nexus/#nexus-search;quick~dbcp 下载ojdbc :http://maven.aliyun.com/nexus/#nexus-search;quick~ojdbc6 3.配置 主配置文件(

Hibernate框架与Mybatis框架的对比

学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/article/details/8190229 第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀的O/R mapping框架.目前属于apache的

使用mybatis框架的一个简单的用户商品的增删改查例子

---恢复内容开始--- 这个例子的实现过程:用户登录----->servlet验证用户是否存在----->显示商品信息----->可以进行商品的删除.修改.添加功能(商品信息是分页显示的) 例子很简单,但是基本的mybatis框架一个也差不多是这样的 数据库表格如下 项目的结构 1.src目录下的mybatis文件和外部源文件 jdbc.properties jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle

Mybatis框架简单使用

Mybatis框架简单使用 环境搭建 新建一个JavaWeb项目,在web\WEB-INF\创建lib文件,并且在其下添加Mybatis的核心包以及依赖包,以及Mysql驱动包,junit4测试包等. 加入配置文件 在src路径下面,新建log4j.properties文件. # Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apa

MyBatis框架知识整理

MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring的JdbcTemplate技术 这些工具都是提供简单的SQL语句的执行,但是和我们这里学的MyBatis框架还有些不同,框架是一整套的东西,例如事务控制,查询缓存,字段映射等等. 我们用原生JDBC操作数据库的时候都会经过: 编写sql---->预编译---->设置参数----->执行sql

Mybatis框架之动态SQL书写方式小结

动态SQL简介 动态SQL是Mybatis框架中强大特性之一.在一些组合查询页面,需要根据用户输入的查询条件生成不同的查询SQL,这在JDBC或其他相似框架中需要在代码中拼写SQL,经常容易出错,在Mybatis框架中可以解决这种问题. 使用动态SQL元素与JSTL相似,它允许我们在XML中构建不同的SQL语句.常用元素为: 判断元素:if,choose 关键字元素:where,set,trim 循环元素:foreach if元素 if元素是简单的条件判断逻辑,满足指定条件时追加if元素内的SQ

Mybatis框架中实现一对多关系映射

学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢? 其实很简单 首先我们照常先准备前期的环境(具体解释请  参考初识Mybatis进行增.删.改.查 blogs )这里我就直接上代码了 主配置文件:Configuration.xml <?xml version="1.0" encoding="UTF-8" ?&