转载

MyBatis之基础入门

什么是MyBatis

起源Apache基金会开源项目iBatis,   2010年由Apache迁移到google code,并改名MyBatis

作用支持普通SQL查询,存储过程和高级映射

封装几乎所有的JDBC代码/参数的手工设置/结果集的检索

优势 简化数据库访问代码

MyBatis体系结构

1:加载配置

两种形式:XML配置文件 / Java代码注解
SQL配置信息加载 --> MappedStatement对象--> 内存
(传入参数映射配置、执行SQL语句、结果映射配置)

2:SQL解析

API接口接收请求(SQL ID:obj//可以是Map、JavaBean或基本数据类型)
MyBatis 根据 ID --> MappedStatement --> 解析 --> SQL语句 参数

3:SQL执行

解析后的SQL语句 参数 --> Database execute --> result

4:结果映射

result --> 根据映射配置转换 --> HashMap JavaBean 基本数据类型 --> return

MyBatis之基础入门

MyBatis配置文件

1 eg. SqlMapConfig.xml  2 <configuration>  3 <environments default="environment">  4     <environment id="environment">  5   6         <transactionManager type="JDBC"/>  7   8         <dataSource type="POOLED">  9             <property nam="driver" value="com.mysql.jdbc.Driver"/> 10             <property name="url" value="jdbc:mysql://localhost:33066/MyDatabase?useUnicode=true&characterEncoding=gbk"/> 11             <property name="username" value="root"/> 12             <property name="password" value=""/> 13         </dataSource> 14  15     </environment> 16 </environment> 17 </configuration>
1 eg. SqlMap.xml  2 <mapper>  3 <!-- mysql insert sentence -->  4 <insert id="addEmp" parameterType="Emp">  5     insert into EMP(NAME,SALARY,AGE)  6     values(#{name},#{salary},#{age})  7 </insert>  8 <!-- mysql select sentence -->  9 <select id="findAll" resultMap="empMap"> 10     select NAME,SALARY,AGE from EMP 11 </select> 12 <!-- result Map --> 13 <resultMap id="empMap" type="cn.com.azcode.entity.Emp"> 14     <result property="name" column="NAME"/> 15     <result property="salary" column="SALARY"/> 16     <result property="age" cloumn="AGE"/> 17 </resultMap> 18 </mapper>

MyBatis框架API介绍

#SqlSessionFactoryBuilder

根据MyBatis配置文件SqlMapConfig.xml构建SqlSessionFactory实例

#SqlSessionFactory

每一个MyBatis的应用程序都以一个SqlSessionFactory对象为核心

#SqlSession

该对象包含了所有执行SQL操作的方法,用于执行已映射的SQL语句

MyBatis 基本应用

1 搭建MyBatis技术环境
· MyBatis-jar包,SQL-jar包
· src/SqlMapConfig.xml配置参数
· 获取SqlSession实例

2:获取SqlSession对象

1     //inject SqlMapConfig.xml 2     String conf="SqlMapConfig.xml"; 3     Reader reader=Resource.getResourceAsReader(conf); 4     //Entity SessionFactory 5     SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBudiler(); 6     SqlSessionFactory sf=sfb.build(reader); 7     //Entity Session 8     SqlSession session=sf.openSession();

3:利用SqlSession实现CRUD操作

· 根据表编写实体类 Java POJOs(Plain Old Java Objects)

· 编写SqlMap.xml映射文件,定义SQL操作和映射信息

· 获取SqlSession对象,执行增删改查操作

· 提交事物(DML操作)

· 释放SqlSession对象资源

//返回类型是实体对象 parameterType="Emp" <!-- mysql insert sentence --> <insert id="addEmp" parameterType="Emp">  insert into EMP(NAME,SALARY,AGE)  values(#{name},#{salary},#{age}) </insert> //insert mission session.insert("addEmp",emp); session.commit(); Session.close(); ------------------------------------------ <!-- mysql update sentence --> <update id="updateDept" parameterType="Emp">  update EMP  set NAME=#{name},SALARY=#{salary}where AGE=#{age} </update> //update mission session.update("updateDept",25); session.commit(); Session.close(); ------------------------------------------ <!-- mysql delet sentence--> <delete id="deleteByName" parameterType="String">  delete from EMP where NAME=#{name} </delete> //delete mission session.delete("deletByName",susan); ------------------------------------------ <!-- mysql findOne sentence--> <select id="findByName" parameterType="String" resultType="Emp">  select NAME,SALARY,AGE from EMP where NAME=#{name} </select> //findOne mission Emp emp = (Emp)session.selectOne("findByName",susan); ------------------------------------------ <!-- mysql findAll sentence--> <select id="findAll" resultType="Emp">  select NAME,SALARY,AGE from EMP </select> //findAll mission List<Emp> list = seesion.selectList("finAll"); 

4:返回Map类型查询结果

<!-- reusultType="java.util.HashMap" --> <select id="findAge" parameterType="int" resultType="java.util.HashMap">  select NAME,SALARY from EMP where AGE=#{age} </select> //map find Map map=(Map)session.selectOne("findAge",20); String name=(String)map.get("NAME"); double salary=(double)map.get("SALARY") 

5:使用Mapper映射器

什么是Mapper映射器:开发者创建绑定映射语句的接口获取映射器接口实例

使用Mapper映射器的好处:不用多次通过session进行操作,简化操作流程,方便方法复用

SqlSession session=sqlSessionFactory.openSession(); try{  EmpMapper mapper=session.getMapper(EmpMapper.class);  //do work  ... }finally{  session.close(); } //DeptMapper 接口定义 public interface EmpMapper{  public List<Emp> findAll();  public Emp find(String name);  public void addEmp(int age);  public void updateEmp(int age);  public void deleteByAge(int age); } //Mapper接口中的方法名和SqlMap.xml中SQL-id一致 

6:ResultMap映射定义

SqlMap.xml定义<select>操作时

若查询字段名和Java POJOs属性不一致时

需要使用<resultMap>指定映射关系

eg. <!-- mysql select sentence --> <select id="findAll" resultMap="empMap">  select NAME,SALARY,AGE from EMP </select> <!-- result Map --> <resultMap id="empMap" type="cn.com.azcode.entity.Emp">  <result property="name" column="NAME"/>  <result property="salary" column="SALARY"/>  <result property="age" cloumn="AGE"/> </resultMap> 
正文到此结束
Loading...