今天就来聊聊这个东西 今天的主角相信你们也看到了 MyBaties 是个什么东东 它有什么做用?怎么用?好很差用今天来讲说 .说到MyBaties 就不得不谈到JDBC你们可能都知道 JDBC用来操做数据库 几乎全部的项目都会跟数据库进行交互 咱们传统的JDBC访问数据主要为如下几部java
弊端mysql
这时MyBaties就出现了 MyBaties是基于JDBC的持久化层框架 它对jdbc操做数据库进行了封装 咱们不须要花费时间区关注如何区处理注册驱动、建立链接 建立语句对象 以及对象与数据库关系的转化之间繁琐的代码,只须要关注SQL自己 并且不须要将SQL写在源码中 直接写在XML配置文件中 是否是很神奇呢?git
那么如何去使用MyBatiesgithub
1.建立java项目sql
2.添加相关联的依赖包数据库
3.添加MyBaties的核心配置文件apache
4.建立数据库 表以及实体类api
5.添加MyBaties映射文件session
6.建立SqlSessionFactory对象 SqlSession对象mybatis
下载MyBaties的地址网上一搜就能够找到 https://github.com/mybatis/mybatis-3/releases
解压后会发现里面有不少jar包咱们能够选择部分添加到项目中 只须要这几个就够了 如今
log4j-1.2.17.jar 这个jar包是一个java日志文件夹包
mybatis-3.5.1.jar 使用MyBateis时必用的架包
mysql-connector-java-5.1.47.jar 用来链接数据库
slf4j-api-1.7.26.jar 简单日记门面
slf4j-log4j12-1.7.26.jar
3.添加MyBaties核心配置文件 这里主要是 配置数据库的链接信息和 关联映射的文件
添加日志组件log4j的配置文件log4j.propertis至classpath根目录下,用于输出MyBatis执行过程当中的日志信息。这里的
com/newroad/dao/StudentMapper.xml 是StudentMapper.xml文件的路径不能写错了
<!-- 关联隐射文件 --> <mappers> <mapper resource="com/newroad/dao/StudentMapper.xml"/> </mappers>
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 6 <configuration> 7 <!-- 配置环境信息,即数据源信息 --> 8 <environments default="d1"> 9 <environment id="d1"> 10 <!-- 配置事务管理器 --> 11 <transactionManager type="JDBC" /> 12 <!-- 配置数据源以及数据库链接信息 --> 13 <dataSource type="POOLED"> 14 <property name="driver" value="com.mysql.jdbc.Driver" /> 15 <property name="url" value="jdbc:mysql://localhost:3306/fresh?characterEncoding=UTF-8" /> 16 <property name="username" value="root" /> 17 <property name="password" value="root" /> 18 </dataSource> 19 </environment> 20 </environments> 21 22 <!-- 关联隐射文件 --> 23 <mappers> 24 <mapper resource="com/newroad/dao/StudentMapper.xml"/> 25 </mappers> 26 27 </configuration> 28
4.建立数据库、表以及实体类
package com.newroad.entity; public class Student { private Integer id; private String name; private String password; private String email; @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + "]"; } public Student(Integer id, String name, String password, String email) { super(); this.id = id; this.name = name; this.password = password; this.email = email; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
5.建立StudentMapper.xml 的映射文件 MyBatis映射文件是一个XML文件,在这个XML文件中能够 咱们能够写要执行的SQL语句
3 <!-- namespace必須属性 使用mybaties时经过namespace的值找到 Mapper文件 --> 4 <mapper namespace="com.newroad.dao.StudentMapper"> 这一步很重要 是一个必须的属性
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <!-- namespace必須属性 使用mybaties时经过namespace的值找到 Mapper文件 --> 4 <mapper namespace="com.newroad.dao.StudentMapper"> 5 <!-- 添加用户信息 --> 6 <insert id="save"> 7 insert into student(id,name,password,email) values (#{id},#{name},#{password},#{email}) 8 </insert> 9 10 <!-- 删除学生信息经过ID --> 11 <delete id="deleteById" > 12 delete from student where id=#{id} 13 4 </delete> 15 16 17 <!-- 修改学生信息 --> 18 <update id="updateById"> 19 update student set name=#{name},password=#{password},email=#{email} where id=#{id} 20 </update> 21 <!-- 查询学生信息 --> 22 <!-- 根据学号查询学生信息 --> 23 <!-- resultType | resultMap 这两个属性必须二选一 指的是将查询到的数据转换成怎样的pojo对象 --> 24 <select id="selectByid" resultType="com.newroad.entity.Student"> 25 select *from student where id=#{id} 26 27 </select> 28 29 <!-- 查询全部学生信息 --> 30 <select id="selectAll" resultType="com.newroad.entity.Student"> 31 select *from student 32 33 </select> 34 35 <!--分页查询 --> 36 <select id="selectByPages" resultType="com.newroad.entity.Student"> 37 select *from student limit #{pageNum},#{pageSize} 38 </select> 39 40 41 42 </mapper>
6.建立SqlSessionFactory、SqlSession对象
注意: int num = session.insert("com.newroad.dao.StudentMapper.save", stu);
这里的 com.newroad.dao.StudentMapper 对应着StudentMapper.xml映射文件中的 namespace的值 然后面的save 对应id的名字必定要相同
1 package com.newroad.test; 2 3 import static org.junit.Assert.assertEquals; 4 import java.io.InputStream; 5 import java.util.List; 6 import org.apache.ibatis.session.SqlSession; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 import org.junit.After; 10 import org.junit.Before; 11 12 import org.junit.Test; 13 14 import com.newroad.entity.Student; 15 16 public class Test2 { 17 // 获取链接配置对象 18 InputStream in = Test2.class.getResourceAsStream("/mybatis-config.xml"); 19 // 建立sqlsessionFactoryBuilder 20 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 21 SqlSessionFactory factory = builder.build(in); 22 SqlSession session; 23 24 @Before // 在每一个test方法执行以前都会执行这个方法 25 public void init() { 26 session = factory.openSession(); 27 } 28 29 @Test // 测试的方法 30 public void test() { 31 Student stu = new Student(12, "pan", "10086", "123432@qq.com"); 32 int num = session.insert("com.newroad.dao.StudentMapper.save", stu); 33 // 断言结果 若是结果为1 成功 34 assertEquals(num, 1); 35 36 } 37 38 @Test 39 public void deleteById() { 40 int num = session.delete("com.newroad.dao.StudentMapper.deleteById", 6); 41 System.out.println("num=" + num); 42 assertEquals(num, 1); 43 } 44 45 @Test 46 public void selectOne() { 47 Student stu = session.selectOne("com.newroad.dao.StudentMapper.selectByid", 4); 48 System.out.println("num=" + stu); 49 assertEquals(stu, 1); 50 } 51 52 @Test 53 public void listStudent() { 54 List<Student> students = session.selectList("com.newroad.dao.StudentMapper.selectAll"); 55 students.forEach(stu -> System.out.println(stu)); 56 57 } 58 59 @After // 在每一个test方法执行后就会执行 60 public void close() { 61 session.commit(); 62 session.close(); 63 } 64 65 }