Mybatis框架学习

大概内容:
1.认识一下mybatis
2.mybatis框架的搭建

认识一下mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

mybatis的特点:

简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql。

mybatis框架的搭建

这里通过一个Java实例来演示:

1.在架mybatis框架时也需要先导入一些包
这里写图片描述

2.编写好值对象类和映射文件(包含值对象信息和想要执行的一些sql操作语句)

//User.java
package cn.hncu.domain;

public class User {
    private String id;
    private String name;
    private String pwd;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", pwd=" + pwd
                +  "]";
    }   
}

//User.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="users">

    <!-- 返回类型是List<User> -->
    <select id="all" resultType="cn.hncu.domain.User">
        select * from users
    </select>
</mapper>

3.需要写一个mybatis的配置文件mybatis-config.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>
    <typeAliases>
        <typeAlias alias="User" type="cn.hncu.domain.User"/>
    </typeAliases>  
    <!-- 这里相当于连接数据库的操作,要预先创建数据库表---users -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
                <property name="poolMaximumActiveConnections" value="5"/><!-- 池大小 -->
            </dataSource>
        </environment>
    </environments> 
    <!-- 导入相应的值对象xml文件 -->
    <mappers>
        <mapper resource="cn/hncu/domain/User.xml"/>
        <mapper resource="cn/hncu/domain/User2.xml"/>
        <mapper resource="cn/hncu/domain/User3.xml"/>
        <mapper resource="cn/hncu/domain/Person.xml"/>
        <mapper resource="cn/hncu/domain/Role.xml"/>
    </mappers>
</configuration>

3.需要写一个获取SqlSession的工具类

package cn.hncu.utils;

import java.io.InputStream;
import java.sql.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SqlSessionUtils {
    private static SqlSessionFactory sessionFactory=null;//sessionFactory相当于一个sqlsession池
    static{
        try {
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");//加载配置文件
            sessionFactory = new SqlSessionFactoryBuilder().build(in);
        /*
            这里也可以不使用Resources类加载配置文件的方法(我们自己利用classLoader以底层的方式加载):
            sessionFactory = new SqlSessionFactoryBuilder().build(SqlSessionUtils.class.getClassLoader().getResourceAsStream("mybatis-config.xml") );
        */
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public static SqlSession getSqlSession() {
        return sessionFactory.openSession();
    }
    public static SqlSession getSqlSession(boolean boo) {
        return sessionFactory.openSession(boo);//con.setAutoCommit(boo)
    }

    public static void main(String[] args) {
        //注意,mybatis在池中控制的是连接的数量,不是sqlSession的个数
        for(int i=0;i<12;i++){
            SqlSession s = getSessionFactory().openSession(); //一个session中只包含一个连接
            Connection con = s.getConnection();
            //Connection con = null;
            System.out.println(s+",,"+con);
        }
    }   
}

4.可以写代码执行操作

//第一种方式
public class Demo {

    @Test
    public void query1_1(){
        SqlSession session = SqlSessionUtils.getSqlSession();
        //List<User> users = session.selectList("all"); //省略命名空间
        List<User> users = session.selectList("users.all"); //不省略命名空间
        for(User user: users){
            System.out.println(user);
        }
        session.close();
    }
}

/*第二种方式
->先写一个接口类,类名和User.xml中mapper的名称空间名一样,写一个方法,方法名和对应的sql操作标识的id一样
*/
public interface UserMapper {
    List<User> all();
}
/*
->在写执行代码
*/
public class Demo {

    @Test //采用接口的方式访问---更安全
    public void query1_2(){
        SqlSession session = SqlSessionUtils.getSqlSession();
        UserMapper um = session.getMapper(UserMapper.class);
        List<User> users = um.all();
        for(User user: users){
            System.out.println(user);
        }
        session.close();
    }

演示结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值