美文网首页Mybatis
Mybatis 快速入门

Mybatis 快速入门

作者: Theodore的技术站 | 来源:发表于2019-03-19 13:09 被阅读117次

    MyBatis 简介

    MyBatis 本是 apache 的一个开源项目 iBatis, 2010年这个项目由 apache software foundation 迁移到了 google code,并且改名为MyBatis 。iBATIS 一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS 提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

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

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

    1. MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。 sql 写在 xml 里,便于统一管理和优化。通过 sql 基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。非常灵活。
    2. 和业务代码解耦,通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql 和代码的分离,提高了可维护性。对开发人员而言,核心 sql 还是需要自己优化:sql 和 java 编码分开,功能边界清晰,一个专注业务、 一个专注数据。

    相比较于 Hibernate:
    Hibernate 无法很好应对,复杂 SQL 语句和复杂关联关系。全表映射比较困难,影响性能。黑盒封装,调优复杂。

    快速入门

    首先建立工程


    image.png

    导入所需的包


    image.png

    创建数据库


    image.png

    mysql驱动配置文件


    image.png
    image.png

    注意: 画红线部分需要改成自己的数据库名字、和自己工程文件相应地址和 mysql jar 包存放地址。

    添加 mybatis 配置文件 mybatis.cfg.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>
    
        <!-- 引入外部配置文件 -->
        <properties resource="db.properties"></properties>
    
        <!-- 为JAVA Bean起类别名 -->
        <typeAliases >
            <!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名
            <typeAliase type="com.pb.mybatis.beans.UserBean" alias="UserBean"/> -->
            <!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
            <package name="com.pb.mybatis.beans"/>
        </typeAliases>
    
        <!-- 配置mybatis运行环境 -->
        <environments default="pbbatis">
            <environment id="pbbatis">
                <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
                <transactionManager type="JDBC" />
    
                <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
                <!-- POOLED 表示支持JDBC数据源连接池 -->
                <!-- UNPOOLED 表示不支持数据源连接池 -->
                <!-- JNDI 表示支持外部数据源连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <!-- 告知映射文件方式1,一个一个的配置
            <mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
            <!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
            <package name="com.pb.mybatis.mapper"/>
        </mappers>
    
    </configuration>
    

    这里大概介绍一下各个参数的含义:


    image.png

    settings 参数较多下面是 settings 参数的解释 了解就好:


    image.png image.png image.png

    environments 参数介绍:

    environment 元素是配置一个数据源的开始,属性id是它的唯一标识;

    transactionManager 元素配置数据库事务,其中type属性有三种配置方式
    jdbc,采用jdbc的方式管理事务;
    managed,采用容器的方式管理事务,在JNDI数据源中使用;
    自定义,自定义数据库事务管理办法;

    dataSource 元素配置数据源连接信息,type属性是连接数据库的方式配置,有四种配置方式
    UNPOOLED 非连接池方式连接
    POOLED 使用连接池连接
    JNDI 使用JNDI数据源
    自定义数据源

    创建对应的实体对象


    image.png
    package com.pb.mybatis.beans;
    
    import java.io.Serializable;
    
    public class UserBean implements Serializable {
        private static final long serialVersionUID = 1L;
        private Integer id;
        private String name;
        private int deptId;
        private float salary;
    
        public UserBean() {
        }
    
        public UserBean(String name, int deptId, float salary) {
            this.name = name;
            this.deptId = deptId;
            this.salary = salary;
        }
    
        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 int getDeptId() {
            return deptId;
        }
    
        public void setDeptId(int deptId) {
            this.deptId = deptId;
        }
    
        public float getSalary() {
            return salary;
        }
    
        public void setSalary(float salary) {
            this.salary = salary;
        }
    
        @Override
        public String toString() {
            return "UserBean{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", deptId=" + deptId +
                    ", salary=" + salary +
                    '}';
        }
    }
    

    创建方法接口 UserMapper.java 和定义操作 tb_emp1 表的 sql 映射文件UserMapper.xml


    image.png
    package com.pb.mybatis.mapper;
    
    import com.pb.mybatis.beans.UserBean;
    
    import java.util.List;
    
    public interface UserMapper {
        public int insertUser(UserBean user) throws Exception;
         /**
           * 修改用戶
           * @param user
           * @param id
           * @return
           * @throws Exception
           */
         public int updateUser (UserBean user,int id) throws Exception;
          /**
            * 刪除用戶
            * @param id
            * @return
            * @throws Exception
            */
          public int deleteUser(int id) throws Exception;
         /**
           * 根据id查询用户信息
           * @param id
           * @return
           * @throws Exception
           */
         public UserBean selectUserById(int id) throws Exception;
          /**
            * 查询所有的用户信息
            * @return
            * @throws Exception
            */
         public List<UserBean> selectAllUser() throws Exception;
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.pb.mybatis.mapper.UserMapper">
        <!-- 自定义返回结果集 -->
        <resultMap id="userMap" type="UserBean">
            <id property="id" column="id" javaType="java.lang.Integer"></id>
            <result property="name" column="name" javaType="java.lang.String"></result>
            <result property="deptId" column="deptId" javaType="java.lang.Integer"></result>
            <result property="salary" column="salary" javaType="java.lang.Float"></result>
        </resultMap>
        <!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->
        <!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys
                    方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->
        <!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
        <!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值  -->
    
    
        <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
            insert into tb_emp1 (name,deptId,salary) values (#{name},#{deptId},#{salary})
        </insert>
    
        <update id="updateUser" >
            update tb_emp1 set name=#{name},deptId=#{deptId},salary=#{salary} where id=#{id}
        </update>
    
        <delete id="deleteUser" parameterType="int">
            delete from tb_emp1 where id=#{id}
        </delete>
    
        <select id="selectUserById" parameterType="int" resultMap="userMap">
            select * from tb_emp1 where id=#{id}
        </select>
    
        <select id="selectAllUser" resultMap="userMap">
            select * from tb_emp1
        </select>
    
    </mapper>
    

    XML 映射器参数解释:
    cache – 给定命名空间的缓存配置。
    cache-ref – 其他命名空间缓存配置的引用。
    resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
    sql – 可被其他语句引用的可重用语句块。
    insert – 映射插入语句
    update – 映射更新语句
    delete – 映射删除语句
    select – 映射查询语句

    select 元素:


    image.png

    在 mybatis-cfg.xml 里注册 UserMapper.xml 文件。请看前面的 mybatis-cfg.xml

    需要建立一个工具类文件


    image.png
    package com.pb.mybatis.tools;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    
    import java.io.IOException;
    import java.io.Reader;
    
    public class DBTools {
        public static SqlSessionFactory sessionFactory;
    
        static {
            try{
                //使用MyBatis提供的Resources类加载mybatis的配置文件
                Reader reader = Resources.getResourceAsReader("com/pb/mybatis/mybatis-config.xml");
                sessionFactory  = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //创建能执行映射文件中sql的sqlsession
        public static SqlSession getSession(){
            return sessionFactory.openSession();
        }
    }
    

    测试一下:


    image.png
    package com.pb.mybatis.service;
    
    import com.pb.mybatis.beans.UserBean;
    import com.pb.mybatis.mapper.UserMapper;
    import com.pb.mybatis.tools.DBTools;
    import org.apache.ibatis.session.SqlSession;
    
    import java.util.List;
    
    public class UserService {
        public static void main(String[] args){
            insertUser();
        }
    
        /**
         * 新增用户
         */
        private static void insertUser() {
            SqlSession session = DBTools.getSession();
            UserMapper mapper = session.getMapper(UserMapper.class);
            UserBean user = new UserBean("bo",123,2000);
            try {
                mapper.insertUser(user);
                System.out.println(user.toString());
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
            }
        }
    
        /**
         * 删除用户
         */
        private static void deleteUser(){
            SqlSession session=DBTools.getSession();
            UserMapper mapper=session.getMapper(UserMapper.class);
            try {
                mapper.deleteUser(1);
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
            }
        }
    
    
        /**
         * 根据id查询用户
         */
        private static void selectUserById(){
            SqlSession session=DBTools.getSession();
            UserMapper mapper=session.getMapper(UserMapper.class);
            try {
                UserBean user=    mapper.selectUserById(2);
                System.out.println(user.toString());
    
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
            }
        }
    
        /**
         * 查询所有的用户
         */
        private static void selectAllUser(){
            SqlSession session=DBTools.getSession();
            UserMapper mapper=session.getMapper(UserMapper.class);
            try {
                List<UserBean> user=mapper.selectAllUser();
                System.out.println(user.toString());
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
            }
        }
    }
    

    测试结果:


    image.png

    相关文章

      网友评论

        本文标题:Mybatis 快速入门

        本文链接:https://www.haomeiwen.com/subject/ghibmqtx.html