Mybatis框架学习

来源:互联网 发布:火箭 模拟软件 编辑:程序博客网 时间:2024/06/11 20:26

大概内容:
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.javapackage 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();    }

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

原创粉丝点击