MyBatis使用学习心得
1、MyBatis简介
Mybatis是基于Java的持久层框架,也是开源的,在使用之前先导入和mybatis有关的jar包,下载地址:http://code.google.com/p/mybatis/;支持普通的SQL查询、存储过程和高级映射的优秀持久层框架。把JDBC代码封装起来,使用简单的XML配置文件,将sql代码从程序代码中彻底分离出来,将接口和Java的POJOs(Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得,SqlSessionFactoryBuilder可以从一个xml配置或一个预定义的配置类的实例获得。
在spring配置文件中注入mybatis,如:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.bean" />
</bean>
2、MyBatis自动装配
Spring中自动注入mybatis配置文件,使用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将他们创建成MapperFactoryBeans,代码如下:
<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dao" />
</bean>
BasePackage属性是让你位映射器接口文件设置基本的包路径。使用逗号或分号可设置多个包路径。
3、xml配置文件字段介绍StudentMapper.xml
(1)、namespace是dao接口所在包和接口名的全称,
<?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">
<!-- 在dao实现中可以使用,直接调用其方法,namespaces是接口路径 -->
<mapper namespace="com.hsi.wtw.dao.StudentMapper">
</mapper>
(2)insert字段是负责往数据库中插入字段,parameterType是数据类型,这个数据类型包括基本数据类型和javabean对象,中间放入sql插入语句
<insert id="insert" parameterType="Student">
insert into
student
values(#{sno},#{sname},#{ssex},#{sage},#{sdept})
</insert>
(3)delete字段是用来删除数据库中数据的,update用来更新数据库,parameterType是参数类型,可以是基本数据类型也可以是对象
<delete id="delete" parameterType="int">
delete from student where sno=#{sno}
</delete>
<update parameterType="Student">sql语句</update>
(4)select字段是选择语句,可以根据一个参数去查找也可以直接查找全部,resultMap是定义一个数据结果集合,property是对应javabean里的属性,column是对应sql语句里查出的数据库中的字段
<select parameterType="int" resultMap="Student">sql语句</delete>
<!-- 定义一个map -->
<resultMap type="Student" id="studentMap">
<id property="sno" column="sno"/>
<result property="sname" column="sname"/>
<result property="ssex" column="ssex"/>
<result property="sage" column="sage"/>
<result property="sdept" column="sdept"/>
</resultMap>
(5)、动态sql语句<if>判断一下值是否为空,然后可以添加动态sql语句
<update id="updateStudent" parameterType="Student">
update student
set name=#{name},
<if test="sno!=null">
sno=#{sno},
</if>
where id=#{id}
</update>
(6)、为了实现查询结果与实体的映射,需要修改resultMap元素,association就是解决这的,来定义一个resultMap集合,来接收多表查询结果
<resultMap id="studentResultMap"type="Student">
<!--普通属性映射与以前一致-->
<idproperty="id"column="id"/>
<resultproperty="name"column="name"/>
<resultproperty="sno"column="gender"/>
<!--property="supervisor"表明这是为了映射学生实体的teacher属性。javaType="Teacher"用到了Teacher这个别名定义,并指出了teacher属性的java类型-->
<association property="teacher"javaType="Teacher">
<!--教师自身的属性与数据库字段的映射。注意这里用到了字段别名-->
<id property="id"column="t_id"/>
<result property="name"column="t_name"/>
<result property="gender"column="t_gender"/>
<result property="researchArea"column="research_area"/>
<result property="title"column="title"/>
</association>
</resultMap>
作者:smallroad