MyBaties初探

参考博客地址,在此像大佬致敬。

什么是MyBaties

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

MyBaties安装

要使用MyBaties可以下载Jar包,将文件放在classPath中即可。

如果使用Maven管理项目,那就更加简单,可以直接在pom.xml中写入引用:如:

 <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
  </dependency>

项目入门练手

步骤一:在本地创建mybaties数据库和t_user表,以下是sql语句:

create database mybaties;
use mybaties;
create table t_user (id int not null primary key auto_increment,username char(20),password char(20), account double(10,0));

步骤二:创建maven项目,用maven来管理项目,选择javaEE类型


步骤三:在pom.xml中引用mybaties和mysql-connector-java如图:

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>

mybaties就是mybaties所需包的引用,mysql-connector-java是用于Mysql的驱动。

步骤四:创建resources文件夹用于存放各种配置文件。底下是工程的项目目录


步骤五:数据库配置文件编写

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybaties?useUnicode=true
jdbc.username=root
jdbc.password=123456

步骤六:UserBean对象创建

package com.zr.beans;

import java.io.Serializable;

/**
 * @author EnzoChan
 * @package com.zr.beans
 * @description:
 * @date 2018/5/14 15:45
 */
public class UserBean implements Serializable {

    private Integer id;
    private String username;
    private String password;
    private Double account;

    public UserBean() {
        super();

    }

    public UserBean(String username, String password, Double account) {
        super();
        this.username = username;
        this.password = password;
        this.account = account;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getAccount() {
        return account;
    }

    public void setAccount(Double account) {
        this.account = account;
    }

    @Override
    public String toString() {
        return "UserBean{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", account=" + account +
                '}';
    }
}

步骤七:编写数据库接口类UserMapper

package com.zr.mapper;

import com.zr.beans.UserBean;

import java.util.List;

/**
 * @author EnzoChan
 * @package com.zr.mapper
 * @description:
 * @date 2018/5/14 15:47
 */
public interface UserMapper {

    /**
     * 增(方法名需与配置文件中的id对应,否则会报BindingException)
     *
     * @param user
     * @return
     * @throws Exception
     */
    public int insertUser(UserBean user) throws Exception;

    /**
     * 改
     *
     * @param user
     * @return
     * @throws Exception
     */
    public int updateUser(UserBean user) throws Exception;

    /**
     * 删
     *
     * @param id
     * @return
     * @throws Exception
     */
    public int deleteUser(int id) throws Exception;

    /**
     * 查
     *
     * @param id
     * @return
     * @throws Exception
     */
    public UserBean selectUserById(int id) throws Exception;


    /**
     * 查 所有
     *
     * @return
     * @throws Exception
     */
    public List<UserBean> selectAllUser() throws Exception;
}

步骤八:xml映射文件编写

<?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.zr.mapper.UserMapper">
    <!-- 自定义返回结果集 -->
    <resultMap id="userMap" type="UserBean">
        <id property="id" column="id" javaType="java.lang.Integer"></id>
        <result property="username" column="username" javaType="java.lang.String"></result>
        <result property="password" column="password" javaType="java.lang.String"></result>
        <result property="account" column="account" javaType="java.lang.Double"></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 t_user (username,password,account) values (#{username},#{password},#{account})
    </insert>

    <update id="updateUser" parameterType="com.zr.beans.UserBean">
        update t_user set username=#{username},password=#{password},account=#{account} where id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from t_user where id=#{id}
    </delete>

    <select id="selectUserById" parameterType="int" resultMap="userMap">
        select * from t_user where id=#{id}
    </select>

    <select id="selectAllUser" resultMap="userMap">
        select * from t_user
    </select>


</mapper>

xml映射文件介绍:

SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

  • cache – 给定命名空间的缓存配置。
  • cache-ref – 其他命名空间缓存配置的引用。
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。
  • sql – 可被其他语句引用的可重用语句块。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句
xml详细介绍可在 官方详细了解。

步骤九:MyBaties配置文件书写

<?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="mysql.properties"></properties>


    <!-- 为JAVA Bean起类别名 -->
    <typeAliases>
        <!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名
        <typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> -->
        <!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
        <!--<package name="com.zr.beans"/>-->
        <typeAlias type="com.zr.beans.UserBean" alias="UserBean"/>
    </typeAliases>


    <!-- 配置mybatis运行环境 -->
    <environments default="cybatis">
        <environment id="cybatis">
            <!-- 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="UserMapper.xml"/>
        <!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
        <!--<package name="com/zr/mapper"/>-->
    </mappers>
</configuration>

配置文件介绍

configuration 配置

  • properties 属性
  • settings 设置
  • typeAliases 类型别名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • plugins 插件
  • environments 环境
    • environment 环境变量
      • transactionManager 事务管理器
      • dataSource 数据源
  • databaseIdProvider 数据库厂商标识
  • mappers 映射器

Mybaties配置文件详解,可在官方中详细了解。

步骤十:数据库工具类编写

package com.zr.tools;

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.Reader;

/**
 * @author EnzoChan
 * @package com.zr.tools
 * @description:
 * @date 2018/5/14 15:53
 */
public class DBTools {
    private static SqlSessionFactory sessionFactory;

    public static SqlSession getSession() {
        if (sessionFactory == null) {
            try {
                Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
                sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return sessionFactory.openSession();
    }
}

步骤十一:测试类编写

package com.zr;

import com.zr.beans.UserBean;
import com.zr.mapper.UserMapper;
import com.zr.tools.DBTools;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) {
        insertUser();
//        getUserById();
//        getAllUser();
//        updateUser();
//        getAllUser();

        getAllUser();
//        deleteUser();
//        getAllUser();
    }


    public static void insertUser() {
        SqlSession session = DBTools.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        UserBean userBean = new UserBean("EnzoChan", "12121212", 7000.0);
        try {
            mapper.insertUser(userBean);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }


    public static void deleteUser() {
        SqlSession session = DBTools.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        try {
            mapper.deleteUser(3);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }

    public static void getUserById() {
        SqlSession session = DBTools.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        try {
            UserBean bean = mapper.selectUserById(3);
            System.out.println(bean.toString());
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }

    public static void getAllUser() {
        SqlSession session = DBTools.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        try {
            List<UserBean> beanList = mapper.selectAllUser();
            int size = beanList.size();
            if (size != 0) {
                for (int i = 0; i < size; i++) {
                    System.out.println(beanList.get(i).toString());
                }
            } else {
                System.out.println("list size is zero");
            }

            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }

    public static void updateUser() {
        SqlSession session = DBTools.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        UserBean newBean = new UserBean("EnzoChan", "901222151554", 12000.0);
        newBean.setId(1);
        try {
            int code = mapper.updateUser(newBean);
            System.out.println("code ====== " + code);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

以下为运行结果

附上代码传送门










猜你喜欢

转载自blog.csdn.net/u012977315/article/details/80313517