Mybatis
Tags:框架
[TOC]
配置文件
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 導入JDBC配置 -->
<properties resource="JDBC.properties"></properties>
<!-- 為實體類設置別名 -->
<typeAliases>
<typeAlias type="com.zzsong.entity.pojo.Comment" alias="Comment" />
<typeAlias type="com.zzsong.entity.pojo.News" alias="News" />
<typeAlias type="com.zzsong.entity.pojo.User" alias="User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driverClass}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 導入mapper -->
<mappers>
<mapper resource="com/zzsong/mapper/ClzMapper.xml" />
</mappers>
</configuration>
JDBC.properties配置
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/getjob?characterEncoding=utf-8
user=root
password=root
mapper
<?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接口的實現(xiàn):namespace為該xml實現(xiàn)的接口 -->
<mapper namespace="com.zzsong.dao.ClzDao">
<!-- 如果表的列名和類的屬性名不一致:設置resultMap -->
<resultMap type="com.zzsong.entity.Clz" id="StuResMap">
<id column="id" property="cid" />
<result column="clzname" property="clzname" />
<result column="clzaddress" property="clzaddress" />
<result column="starttime" property="cstarttime" />
<result column="endtime" property="cendtime" />
<!-- 表的一對一關系:如果實體類內(nèi)有對象屬性,如班級中有一個老師 -->
<!-- property:班級類中教師對象的屬性名 ; javaType教室對象所屬的類 -->
<association property="teacher" javaType="com.zzsong.entity.Teacher">
<!-- column:數(shù)據(jù)庫中表的列名 ; property:教師類中的屬性名 -->
<id column="tid" property="id" />
<result column="tmane" property="name" />
</association>
<!-- 表的一對多關系:如果實體類中存在對象List,如班級中存在學生列表 -->
<collection property="list" ofType="com.iflysse.model.StuInfo">
<id column="sid" property="id" />
<result column="sname" property="name" />
<result column="classid" property="classid" />
</collection>
</resultMap>
<!-- 若設置了resultMap,則使用resultMap=“”,否則使用resultType="" -->
<!-- resultType內(nèi)可填寫實體類的完全限定名或者使用住配置文件中設置的該類的別名 -->
<!-- resultMap內(nèi)則填寫該resultMap的id -->
<select id="getClzById" parameterType="int" resultMap="StuResMap">
select * from clz where id = #{id}
</select>
<select id="getAllClz" resultType="com.zzsong.entity.Clz">
select * from clz
</select>
<insert id="addClz" parameterType="com.zzsong.entity.Clz">
insert into clz
(clzname,clzaddress,starttime,endtime) values
(#{clzname},#{clzaddress},#{starttime},#{endtime})
</insert>
<update id="updateClz" parameterType="com.zzsong.entity.Clz">
update clz set
clzname=#{clzname},clzaddress=#{clzaddress},starttime=#{starttime},endtime=#{endtime}
where id = #{id}
</update>
<delete id="deleteClzById" parameterType="int">
delete from clz where
id = #{id}
</delete>
<!-- 動態(tài)SQL -->
<select id="getClzes" parameterType="java.util.Map" resultMap="StuResMap">
select * from clz where
<if test="clzname != '%null%'">
clzname like #{clzname} and
</if>
<if test="clzaddress != '%null%'">
clzaddress like #{clzaddress}
</if>
</select>
</mapper>
調(diào)用存儲過程
新建存儲過程
CREATE PROCEDURE getUserCountBySex(in sex_index int,OUT myCount int)
BEGIN
IF(sex_index = 0)
THEN
select COUNT(1) INTO myCount from userinfo t where t.sex = '女';
ELSE
select COUNT(1) INTO myCount from userinfo t where t.sex = '男';
end IF;
END
SET @myCount = 0;
CALL getUserCountBySex(1,@myCount);
SELECT @myCount;
Mybatis調(diào)用存儲過程
<!-- 調(diào)用存儲過程 -->
<select id="getNumBySex" parameterMap="myMap" statementType="CALLABLE">
call getNumBySex(?,?)
</select>
<parameterMap type="java.util.Map" id="myMap">
<parameter property="sexIndex" mode="IN" jdbcType="INTEGER" />
<parameter property="sexCount" mode="OUT" jdbcType="INTEGER" />
</parameterMap>
調(diào)用
普通調(diào)用
public class MainTest {
public static void main(String[] args) {
InputStream ins = MainTest.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(ins);
SqlSession session = factory.openSession(true);
String statement = "com.zzsong.mapper.ClzMapper.getClzes";
String clzname = null;
String clzaddress = "1";
Map<Object, Object> map = new HashMap<Object, Object>();
map.put("clzname", '%' + clzname + '%');
map.put("clzaddress", '%' + clzaddress + '%');
System.out.println(session.selectList(statement, map));
}
}
實現(xiàn)接口
main
public class MainText {
public static void main(String[] args) {
InputStream ins = MainText.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(ins);
SqlSession session = factory.openSession();
ClassDao classDao = session.getMapper(ClassDao.class);
}
}
Factory
public class DaoFactory {
private static SqlSession session;
static {
InputStream ins = DaoFactory.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(ins);
session = factory.openSession(true);
}
public static UserDao getUserDao() {
return session.getMapper(UserDao.class);
}
public static NewsDao getNewsDao() {
return session.getMapper(NewsDao.class);
}
public static CommentDao getCommentDao() {
return session.getMapper(CommentDao.class);
}
}