第一,创建util
在util里创建SqlSessionFactory;
创建inputStream得到xml配置文件,对其进行设置环境,数据库连接的properties
<configuration>
<environments default="oracleds">
<environment id="oracleds">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="hr"/>
<property name="password" value="hr"/>
</dataSource>
</environment>
</environments>
(一定要把dao的xml配置好,否则此xml读取dao.xml文件时会报错)
<!--dao.xml-->
<mappers>
<mapper resource="com/zpark/person/dao/impl/PersonDAOImpl.xml"/>
</mappers>
,通过SqlSessionFatoryBuilder读取inputstream创建SqlSessionFactory。
创建方法,返回SqlSessionFactory创建的sqlsession。
private static SqlSessionFactory sf = null;
static {
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
sf = sfb.build(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 获得SqlSession对象
*/
public static SqlSession openSession(){
return sf.openSession();
}
使用Junit4测试是否连接成功
第二,根据需求创建view
在view层定义好所有方法及界面
第三,根据view建立service层接口
第四,根据service层接口需求定义dao层接口
第五,在dao层里的xml文件完善dao。
- *其中首先要注意parameterType里面的路径以及sql语句,如果需要模糊查询可以使用变量||‘%’
- *只有一个参数,且参数类型不是实体类型,sql语句绑定参数 #{参数名}
- *查询语句,MyBatis会将select查询sql的结果,会将每个字段的数据赋值给实体的相同名字的属性;
- *如果列名和返回值的实体属性名不一致,可以通过as “别名”
- *如果查询结果是集合,select标签的返回值类型,是集合中元素的类型权限定名
<mapper namespace="com.zpark.person.dao.PersonDAO">
<!-- insertPerson -->
<insert id = "insertPerson" parameterType="com.zpark.person.entity.Person">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="BEFORE">
select seq_person.nextval from dual
</selectKey>
insert into t_person(p_id,name,age,sex,email,address,mobile)
values(#{id},#{name},#{age},#{sex},#{email},#{address},#{mobile})
</insert>
<select id="queryAllPersons" resultType="com.zpark.person.entity.Person">
select p_id as "id",name,age,sex,email,address,mobile from t_person
</select>
<select id="queryPersonByName" parameterType="java.lang.String" resultType="com.zpark.person.entity.Person">
select p_id as "id",name,age,sex,email,address,mobile from t_person where name like #{name}||'%'
</select>
<select id="queryPersonById" parameterType="java.lang.Integer" resultType="com.zpark.person.entity.Person">
select p_id as "id",name,age,sex,email,address,mobile from t_person where p_id = #{id}
</select>
<select id="queryPersonByMobile" parameterType="java.lang.String" resultType="com.zpark.person.entity.Person">
select p_id as "id",name,age,sex,email,address,mobile from t_person where mobile like #{mobile}||'%'
</select>
<delete id="deletePerson" parameterType="java.lang.Integer" >
delete from t_person where p_id = #{id}
</delete>
<update id="updatePerson" parameterType="com.zpark.person.entity.Person" >
update t_person set name = #{name},age = #{age},sex = #{sex},email = #{email},address = #{address},mobile = #{mobile} where p_id = #{id}
</update>
</mapper>
如果查询参数有多个:
1.不能用parameterType属性:
2.接口的方法声明中,对每个参数使用 @Param(value="参数别名")//value= 可以省略
3.mapper文件中sql,绑定参数 #{参数别名}
如果sql语句中包含 > < 特殊转义字符
方法1:使用CADATA块
<![CDATA[
...被当做普通字符串解析
]]>
方法2:转义字符:
> >
< <
第六,使用Junit4测试dao
第七,将service补充完整,并使用Junit4测试
将view层补充完整