Mybatis入门(一)

简介

  MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
  iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
  当前,最新版本是MyBatis 3.5.2 ,其发布时间是2019年7月15日。

入门

1、安装

  要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

  如果是在Maven构建的项目中则需要添加依赖,将下面的代码写进pom.xml中,也可以去https://mvnrepository.com/寻找需要的依赖进行使用。

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

2、从 XML 中构建 SqlSessionFactory

  每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,而SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

  Mybatis包含一个Resources工具,可以加载资源文件

String resource = "配置文件全限定名";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

  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="development">
    <environment id="development">
     <!--事务管理器
                使用mysql的事务管理器来管理事务
            -->
      <transactionManager type="JDBC"/>
      <!--数据源-->
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <!--关联Mapper映射文件--> 
  <mappers>
    <mapper resource="映射文件的全限定名,这里的映射文件就是后面SqlSession要用到的xml文件"/>
  </mappers>
</configuration>      

  升级版的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"/>

    <!--配置别名 -->
    <typeAliases>
        <!--配置单个对象的别名-->
        <!--<typeAlias type="com.test.User" alias="User"></typeAlias>-->
        <!--配置一个包所有类的别名,默认别名是类名,大小写不敏感
            可以在bean包的类名上加上@Alias("别名")进行命名
        -->
        <!--<package name="com.test"/>-->
    </typeAliases>




    <!-- 配置环境
        default:development启动时使用哪个环境
    -->
    <environments default="development">
        <environment id="development">
        <!-- 使用mysql的事物管理器来管理事务-->
            <transactionManager type="JDBC"/>
            <!--数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>


    <!--关联mapper文件-->
    <mappers>
        <mapper resource="com/test/UserMapper.xml"></mapper>
    </mappers>

</configuration>
使用读取配置文件的方法进行配置

  db.properties文件内容

driver= com.mysql.jdbc.Driver
url = jdbc:mysql:///mybatis?
username = root
password = ccc

3、从SqlSessionFactory获取SqlSession

SqlSession session = sqlSessionFactory.openSession();

这里提供一个工具类,用来获取SqlSession

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 MybatisUtil {
    private static SqlSessionFactory sf;
    static{
        InputStream in = null;
        try {
    //注意将mybatis.xml文件放入resources文件中,可以随意起名字
            in = Resources.getResourceAsStream("mybatis.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }

        sf=new SqlSessionFactoryBuilder().build(in);
    }
    public static SqlSession getSession(){
        return sf.openSession();
    }
}    
工具类

4、SqlSession用来执行语句

//增加
int result = session.insert("com.test.dao.IUserDao.save", user);
//删除
int result = session.delete("com.test.dao.IUserDao.delete", id);
//修改
int result = session.update("com.test.dao.IUserDao.update", user);
//查询单一对象
User user = (User)session.selectOne("com.test.dao.IUserDao.find", id);
//查询所有对象
List<User> list = session.selectList("com.test.dao.IUserDao.findAll");

其对应的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">
<!--namespace一般是接口的全限定名-->
<mapper namespace="com.test.dao.IUserDao">
    <!--  #{}表示调用对象中响应的get方法-->
    <!--  保存  
    useGeneratedKeys是否返回对应主键值
    keyProperty将主键的值返回给类的哪个属性
    -->
    <insert id="save" useGeneratedKeys="true" keyProperty="id">
        insert into user values(null,#{username},#{password},#{date},#{salary})
    </insert>

    <!--  删除  -->
    <delete id="delete">
        delete from user where id=#{id}
    </delete>

    <!--  更新  -->
    <update id="update">
        update user set username=#{username},password=#{password},date=#{date},salary=#{salary} where id=#{id}
    </update>

    <!--type:把结果集封装成对象的类型-->
    <resultMap id="myResultMap" type="User">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="date" property="date"/>
        <result column="salary" property="salary"/>
    </resultMap>

    <!--  查训一个  -->
    <select id="find" resultMap="myResultMap">
        select * from user where id=#{id}
    </select>

    <!--  查询全部 -->
    <select id="findAll" resultType="User">
        select * from user
    </select>
</mapper>
xml映射文件

 5、导入日志

  添加属性配置文件,名字必须为log4j.properties

# ERROR>WARN>INFO>DEBUG>TRACE

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
<!--修改下面的路径即可进行日志记录-->
log4j.logger.com.test.dao=TRACE


# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

  导入依赖

  <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
      <scope>test</scope>
    </dependency>
日志依赖
原文地址:https://www.cnblogs.com/xfdhh/p/11433061.html