MyBaties --day1

今天就来聊聊这个东西 今天的主角相信大家也看到了 MyBaties  是个什么东东 它有什么作用?怎么用?好不好用今天来说说 .说到MyBaties 就不得不谈到JDBC大家可能都知道 JDBC用来操作数据库 几乎所有的项目都会跟数据库进行交互 我们传统的JDBC访问数据主要为以下几部

  1. 通过Class.forName()加载驱动程序
  2. 通过DriverManage.getConnection()获取数据库连接
  3. 通过Connection.createStatement()或者preparedStatement()创建操作数据库的语句对象
  4. 执行SQL语句
  5. 处理SQL语句
  6. 关闭资源

弊端

  1. 他将数据库连接的信息都写在了java代码中 不便于数据源的切换
  2. 频繁的创建销毁数据连接 影响了程序的性能
  3. java源码中出现了大量的SQL语句 不便于修改SQL
  4. java对象模型与数据库关系不兼容 jdbc操作数据库时存在大量的实体对象与数据库关系之间相互转换的代码 可维护性差

这时MyBaties就出现了 MyBaties是基于JDBC的持久化层框架 它对jdbc操作数据库进行了封装 我们不需要花费时间区关注如何区处理注册驱动、创建连接 创建语句对象 以及对象与数据库关系的转化之间繁琐的代码,只需要关注SQL本身 而且不需要将SQL写在源码中 直接写在XML配置文件中 是不是很神奇呢?

那么如何去使用MyBaties

      1.创建java项目

      2.添加相关联的依赖包

      3.添加MyBaties的核心配置文件

      4.创建数据库 表以及实体类

      5.添加MyBaties映射文件

      6.创建SqlSessionFactory对象 SqlSession对象

    下载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

MyBaties --day1_第1张图片

 

3.添加MyBaties核心配置文件 这里主要是 配置数据库的连接信息和 关联映射的文件 

添加日志组件log4j的配置文件log4j.propertis至classpath根目录下,用于输出MyBatis执行过程中的日志信息。这里的

com/newroad/dao/StudentMapper.xml 是StudentMapper.xml文件的路径不能写错了
   
     
       
     

 

 

MyBaties --day1_第2张图片

 



 

 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 
 4  这一步很重要 是一个必须的属性
 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 
 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  
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 
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", "[email protected]");
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 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 }

 

 

 

 

 

你可能感兴趣的:(MyBaties --day1)