Mybatis简单学习总结

小铃铛    2019.10.28

mybatis入门

那今天什么是Mybatis???mybatis是一个持久层框架,apache基金会下的一个顶级项目(开源的),是一个半自动化的ORMapping

  • 1、开发步骤
    • 加载mybatis的jar包(maven依赖)
    • 编写mybatis的核心配置文件
<configuration>
 <!-- 导入db.properties文件 -->
  <properties  resource="db.properties" />
 <!-- 批量修改别名 (cn.lanqia.entity)  -->
  <typeAliases>
		<package name="cn.lanqiao.entity"/>
 </typeAliases>
<!-- 数据库连接信息配制 -->
<environments default="developer">
       <environment id="developer">
		  <transactionManager type="JDBC"/>
	      <dataSource type="POOLED">
	        <property name="driver" value="${driver}"/>
	        <property name="url" value="${url}"/>
	        <property name="username" value="${user}"/>
	        <property name="password" value="${password}"/>
	      </dataSource>
	    </environment>
       </environment>
</environments>
 <!-- 导入映射 文件 -->
 <mappers>
   <package name="cn.lanqiao.mapper"/>
</mappers>

</configuration>
 <!-- 编写db.properties文件 -->
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisdb?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=123456
  • 编写映*射文件
  • 在核心配置文件中加载映射文件
在工作中,mybatis的开发一般使用mapper代理模式
<mapper namespace="mapper接口全路径">
	<cache/>
    <select  id="" resultType="" resultMap="" paramType="" userCache="false"/>
    <update/>
    <delete />
    <insert />
    <resultmap />
    <sql />
    <include />
    <!-- 动态 SQL -->
</mapper>

  • 2、mybatis工作原理
    1、加载mybatis核心配置文件
    2、创建一个会话工厂对象
    3、由会话对象创建会话对象
    4、使用session对象取数据
    5、关闭session
//测试代码,,,看大致即可
package cn.lanqiao.test;

import java.io.IOException;
import java.io.InputStream;

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 org.junit.Test;

import cn.lanqiao.entity.Department;
import cn.lanqiao.entity.vo.EmpVo;
import cn.lanqiao.mapper.DepartmentMapper;
import cn.lanqiao.mapper.EmpMapper;

public class departmentTest {
	private static SqlSessionFactory factory=null;
	static {
		
		String resource="mybatis-config.xml";

		 try {			
			 InputStream in=Resources.getResourceAsStream(resource);
			 factory=new SqlSessionFactoryBuilder().build(in);
		} catch (IOException e) {e.printStackTrace();}	
	}
	@Test
	public void testGet() {
		SqlSession session=factory.openSession();
		DepartmentMapper mapper=session.getMapper(DepartmentMapper.class);
		Department dept=mapper.get(10);
		System.out.println(dept);
	}
	
	@Test
	public void testgetbyid() {
		SqlSession session=factory.openSession();
		EmpMapper mapper=session.getMapper(EmpMapper.class);
	    EmpVo empvo=mapper.getEmpByEmpno(4);
	    System.out.println(empvo);
	    System.out.println(empvo.getDname());
	}
}

  • 3、mybatis api
    Resources -->getResourceAsStream(resource)
    SqlSessionFactoryBuilder–>builder(InputStream)
    SqlSessionFactory–>openSession
    SqlSession -->selectOne|selectList|insert|update|delete|getMapper|close|
    commit
  • 4、mybatis几个对象的作用域
    SqlSessionFactoryBuilder
    SqlSessionFactory
    SqlSession

mybatis进阶

  • 1、mybatis核心配置文件常用配置
    typeAliases
    environments
    mappers
    settings
  • 2 、mysql分页
    select *from emp limit startindex,pagesize
  • 3 、mybatis日志
//log4j.properties
# 日志输出到控制台
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
# log4j.logger.org.mybatis.example.BlogMapper=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
# 日志输出到文件;

  • 4 、基于xml的2种开发模式【重点】
    1、传统的dao模式【了解】
    2、mapper代理模式【重点掌握】

    只需要用户编写接口,实现类有mybatis自动生成;使用此模式开发,
    需要遵守mapper代理模式规范(4条) 
    
//EmpMapper.java
package cn.lanqiao.mapper;
import cn.lanqiao.entity.vo.EmpVo;
public interface EmpMapper {
	public EmpVo getEmpByEmpno(int empno);
}
//xml代码 EmpMapper.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="cn.lanqiao.mapper.EmpMapper">
   <select id="getEmpByEmpno" parameterType="int" resultType="cn.lanqiao.entity.vo.EmpVo">
  	select 
  	e.*,d.dname
  	from emp e,dept d
  	where e.deptno=d.dno and empno=#{empno}
  	</select>
  </mapper>
mapper代理模式有4点规范
1、映射文件根节点的namespace名称为mapper接口全路径
2、变迁的id与mapper接口的方法名必须一样
3、标签的返回值类型与mapper接口中方法的返回值类型一致
4、标签总的参数类型与mapper接口中方法的参数类型一致
mapper接口命名规范  xxxMapper
手动配置mapper映射文件 resultMap重点掌握
 当数据库设计的属性和java设计的属性不是一样的时候,就需要手动映射

Mybatis简单学习总结_第1张图片
Mybatis简单学习总结_第2张图片

package cn.lanqiao.mapper;

import cn.lanqiao.entity.Department;

public interface DepartmentMapper {
	public Department get(int deptno);
}

<?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="cn.lanqiao.mapper.DepartmentMapper">
     <resultMap type="department" id="deptresultmap">
     <!-- id对应的是主键  手动映射-->
     <id column="dno" property="deptno"/>
     <result column="dname" property="deptname"/>
     
     </resultMap>
    
  	<select id="get" parameterType="int" resultMap="deptresultmap">
  	select * from dept where dno=#{dno};
  	</select>
  
  </mapper>
  • 5 、 mybatis的注解开发【重点】
    Mybatis简单学习总结_第3张图片
  • 6 、多表查询【难点】
    一对一,一对多
    1、使用vo类,变成简单地单表映射(最简单)上面有代码
    2、嵌套结果
    3、嵌套查询
  • 7 、动态SQL【重点】
在mapper文件中写
大致是这样的
<select id="search" resultType="emp" parameterType="employeevo">
 select * from emp
 <where>
   <if test="deptno!=null">  //查询参数是java中的参数,如果不为空
    and deptno=#{deptno}
   </if>
    <if test="esal!=null">
    and esal=#{esal}
   </if>
 </where>
</select>
  • 8 、mybatis缓存
    1、一级缓存
    session级别的,没什么特别的
    2、二级缓存
    用的时候必须开启,在mapper配置文件中加,需要对实体类进行序列化,它能够存1024个session对象,可以自定义大小

你可能感兴趣的:(Mybatis简单学习总结)