MyBatis基础入门

MyBatis入门

  • 一.什么是MyBatis
  • 二.Mybatis的基本配置
  • 三.MyBatisCRUD
    • 3.1**抽取 MyBatisUtil 工具类**
    • 3.2 CRUD的关键代码
  • 四.注意点与细节
    • 4.1 添加时需要获取 id
    • 4.2 别名
    • 4.3 日志管理
    • 4.4 列名与属性名不一致

一.什么是MyBatis

MyBatis就是一个ORM框架(操作数据库)

面试题

  • MyBatis与Hibernate的区别

MyBatis自己写SQL,性能更好控制

  • MyBatis与JDBC的区别

MyBatis只需要关注SQL,其它完成了封装

  • #与$的区别

#(接收普通参数,预编译,性能好,安全性高),$正好相反

二.Mybatis的基本配置

  • 导包(核心,依赖包,数据库驱动包)
  • 核心配置文件 mybatis-config.xml


<configuration>
    
    
    <properties resource="jdbc.properties" />
    <environments default="development">
        
        <environment id="development">
            <transactionManager type="JDBC" />
            
            <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>
        
        <mapper resource="cn/wing/domain/employeeMapper.xml" />
    mappers>
configuration>
  • 新建表,新建domain (例: Employee 类)
  • 创建映射文件 EmployeeMapper.xml



<mapper namespace="cn.wing.domain.EmployeeMapper">
    
    <select id="findOne" parameterType="long" 
    resultType="cn.wing.domain.Employee" >
        select * from employeewhere id = #{id}
    select>
mapper>
  • 完成功能
//SqlSessionFactoryBuilder -> SqlSessionFactory -> SqlSession
@Override
	public Product findOne(Long id) {
		try {
			//1.读取核心配置文件
			Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
			//2.创建一个对象:SqlSessionFactory 相当于咱们JPA:EntityManagerFactory
			//  SqlSessionFactoryBuilder:构造者模式
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
			//3.创建一个对象:SqlSession 相当于当前JPA:EntityManager
			SqlSession session = factory.openSession();
			//4.session操作数据库(读取数据)
			/**
			 * 方式中有两个值:
			 *  第一个值(statement):找SQL的字符串
			 */
		   Product product = session.selectOne("cn.wing.domain.EmployeeMapper.findOne",id);
		   return product;
		} catch (Exception e) { //注意,不要用IO异常(很多错看不出来)
			e.printStackTrace();
		}

		return null;
	}

三.MyBatisCRUD

3.1抽取 MyBatisUtil 工具类

public class MyBatisUtil {
    private MyBatisUtil(){}

    private static SqlSessionFactory sessionFactory;

    //在静态代码块中创建SqlSessionFactory对象
    static {
        try {
            sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //返回SqlSession对象
    public static SqlSession openSession(){
        return sessionFactory.openSession();
    }
}

3.2 CRUD的关键代码

session.insert("cn.wing.domain.EmployeeMapper.save", product);

session.update("cn.wing.domain.EmployeeMapper.update", product);

session.delete("cn.wing.domain.EmployeeMapper.delete",id);

Product product = session.selectOne("cn.wing.domain.EmployeeMapper.findOne",id);

List<Product> products = session.selectList("cn.wing.domain.EmployeeMapper.findAll");
  • 注意: 增删改需要提交事务

四.注意点与细节

4.1 添加时需要获取 id

  • useGeneratedKeys:是否要返回id
  • keyColumn:数据库中的主键对应的列
  • keyProperty:domain中对应的主键属性
  • id返回到传过来的对象中

            ...

4.2 别名

  • 内置别名(文档中有)
  • 自定义别名 mybatis-config.xml\
  • 别名不区别大小写
  • 注意它的配置顺序(如果配置错误会有提示)

<typeAliases>
    
    
    <package name="cn.wing.domain" />
typeAliases>

4.3 日志管理

在资源根目录创建:log4j.properties

#log4j.properties(日志文件:)
#ERROR错误的日志 WARN:警告 INFO:普通信息 DEBUG:调试日志 TRACE:日志
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
#把左边包名改成你自己的包名
log4j.logger.cn.itsource=TRACE

#日志打印到控制台中
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#日志打印的一种格式(可以灵活地指定布局模式)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#日志打印的格式是什么样子的 %d:日期 %p:优先级 %c:类的全名 %m:输出的结果 %n:换行
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

4.4 列名与属性名不一致

  • 添加与修改在相应位置修改名称即可
  • 查询需要创建一个resultMap
  • 使用的时候返回结果必需是resultMap

<resultMap id="employeeMap" type="employee">
    
    <id column="id" property="id" />
    
    <result column="dept_id" property="deptId" />
resultMap>


<select id="findAll" resultMap="employeeMap" >
    select * from product
select>

你可能感兴趣的:(java,java,mybatis)