MyBatis学习(二)

MyBatis的主要类

Resources :负责读取文件

InputStream in = Resources.getResourceAsStream("mybatis.xml");

SqlSessionFactoryBuilder:创建SqlSessionFactory对象

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

SqlSessionFactory factory = builder.build(in);

SqlSessionFactory:重量级对象,程序创建一个对象耗时比较长,使用资源较多。在整个项目中有一个就可以了。

SqlSessionFactory是一个接口,接口实现类:DefaultSqlSessionFactory

SqlSessionFactory作用:获取SqlSession对象

SqlSession sqlsession = factory.openSession();

openSession():无参数,获取是非自动提交事务的SQLSession对象

openSession(boolean):openSession(true)获取自动提交事务的SqlSession

                                            openSession(false)获取非自动提交事务的SqlSession

SqlSession sqlSession = factory.openSession();

SqlSession(重点):是一个接口,定义了操作数据库的方法例如

selectOne()、selectList()、insert()、update()、commit()、rollback()。

SqlSession的实现类:DefaultSqlSession

使用要求:SqlSession对象不是线程安全的,需要再方法内部使用,在执行sql语句之前,使用openSession()获取SqlSession对象,在执行完sql语句后,需要关闭它,执行SqlSession.close(),这样线程才是安全的

使用工具类简化代码

创建一个新的java文件作为工具类

package ys.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class mybatis {
    //定义全局变量 Factory
    private static SqlSessionFactory factory=null;
    //静态代码块,加载对象SqlSessionFactory
    static {
        String config="mybatisdemo.xml";//需要和你的项目中的文件名一样
        try {
            InputStream in = Resources.getResourceAsStream(config);
            //赋值SqlSessionFactory对象
            factory=new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取SqlSession的方法
    public static SqlSession getSqlSession(){
        SqlSession sqlSession=null;
        if(factory!=null){
            sqlSession=factory.openSession();//非自动提交事务
        }
        return sqlSession;
    }
}

再将mybatis学习(一)中的MyAPP文件修改

package ys;

import org.apache.ibatis.session.SqlSession;
import ys.domain.ssm;
import ys.utils.mybatis;

import java.io.IOException;
import java.util.List;

public class MyApp2 {
    public static void main(String[] args) throws IOException{
            //获取SqlSession对象,从SqlSessionFactory中获取SQLSession----重点
        SqlSession sqlSession = mybatis.getSqlSession();
            //指定要执行的sql语句的标识,定义格式sql映射文件中的namespace+"."+标签的id值----重点
        String sqlId1="ys.dao.ssmDao"+"."+"selectssm";
        String sqlId2="ys.dao.ssmDao"+"."+"insertssm";
            //执行sql语句,通过sqlId找到语句
        List<ssm> ssmList1=sqlSession.selectList(sqlId1);
        //创建对象 进行传值 ——需要插入的数据
        ssm ssm = new ssm();
        ssm.setId(311);
        ssm.setAge(2011);
        ssm.setEmail("zf11@168.com");
        ssm.setName("张飞11");
        //返回一个整数值,代表对数据库插入了几条消息
        int ssmList2=sqlSession.insert(sqlId2,ssm);
        //MyBatis默认不提交事务,需要自己手动提交。 不要重复提交会报错
        sqlSession.commit();
            //输出结果
        System.out.println("执行insert结果="+ssmList2);
        ssmList1.forEach(stu -> System.out.println(stu));
            //关闭SQLSession对象
        sqlSession.close();

        }

    }

传统Dao层的使用

创建一个新的MyBatis项目

StudentDao接口 用于定义sql语句方法                       
StudentDao.xmlsql映射文件
Studentdemo.java接口的实现类
Student.java实体类
mybatisclass.java工具类
myapp.java主方法
mybatis.xml主配置文件

StudentDao

package ys.dao;

import ys.domain.Student;

import java.util.List;

public interface StudentDao {
    List<Student> selectStudents();//定义查询方法

    int insertStudent(Student student);//定义添加方法
}

StudentDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="ys.dao.StudentDao">
      //id 与接口中的方法名相同
    <select id="selectStudents" resultType="ys.domain.Student">
        select age,name,id,email from Student order by id
    </select>
    <insert id="insertStudent">
        insert into Student values (#{id},#{name},#{email},#{age})
    </insert>
</mapper>

 Studentdemo.java

package ys.dao;

import org.apache.ibatis.session.SqlSession;
import ys.domain.Student;
import ys.utils.mybatisclass;

import java.util.List;

public class Studentdemo implements StudentDao{
    @Override
    public List<Student> selectStudents() {
        //获取SqlSession对象
        SqlSession sqlSession= mybatisclass.getSqlSession();
        String sqlId="ys.dao.StudentDao.selectStudents";
        //执行sql语句
        List<Student> students=sqlSession.selectList(sqlId);
        //关闭
        sqlSession.close();
        return students;
    }

    @Override
    public int insertStudent(Student student) {
        //获取SqlSession对象
        SqlSession sqlSession= mybatisclass.getSqlSession();
        String sqlId="ys.dao.StudentDao.insertStudent";
        //执行sql语句
        int nums=sqlSession.insert(sqlId,student);
        //提交事务
        sqlSession.commit();
        //关闭
        sqlSession.close();
        return nums;
    }
}

Student.java

package ys.domain;

public class Student {
    private Integer id;
    private String  name;
    private String email;
    private Integer age;

    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 getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

mybatisclass.java

package ys.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class mybatisclass {
    //定义全局变量 Factory
    private static SqlSessionFactory factory=null;
    //静态代码块,加载对象SqlSessionFactory
    static {
        String config="mybatis.xml";//需要和你的项目中的文件名一样
        try {
            InputStream in = Resources.getResourceAsStream(config);
            //赋值SqlSessionFactory对象
            factory=new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取SqlSession的方法
    public static SqlSession getSqlSession(){
        SqlSession sqlSession=null;
        if(factory!=null){
            sqlSession=factory.openSession();//非自动提交事务
        }
        return sqlSession;
    }
}

myapp.java

package ys;

import ys.dao.StudentDao;
import ys.dao.Studentdemo;
import ys.domain.Student;

import java.util.List;

public class myapp {
    public static void main(String[] args) {
//        StudentDao dao =new Studentdemo(); 定义StudentDao类对象dao
//        List<Student> students = dao.selectStudents(); 调用方法
//        1.Dao对象,类型为StudentDao 全限定名称为:ys.dao.StudentDao
//          全限定名称和sql映射文件里的namespace一样
//        2.方法名称,selectStudent 这个是sql映射文件中的id值,也是实现类的方法名
//        3.通过dao中方法的返回值也可以确定MyBatis要调用SqlSession的方法
//        如果返回值是List 调用SqlSession.selectList()
//        如果返回值为int 或是非List的 看sql映射文件中的标签<insert> <update> 就会调用insert或者update方法
        StudentDao dao =new Studentdemo();
        Student student =new Student();
        //添加的数据
        student.setAge(20);
        student.setId(5);
        student.setEmail("15649@168.com");
        student.setName("隆");
        //执行添加的sql语句
        int nums=dao.insertStudent(student);
        System.out.println("添加数据的数量"+nums);
        //执行查询的sql语句
        List<Student> students = dao.selectStudents();
        //循环输出查询到的数据库中的内容
        for (Student stu:students){
            System.out.println(stu);
        }
    }
}

mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="1">
        <environment id="1">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ys"/>
                <property name="username" value="******"/>
                <property name="password" value="******"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="ys\dao\StudentDao.xml"/>
    </mappers>
</configuration>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值