mybatisはxmlを使って添削してコード解析を行います。
MyBatisは、一般的なsqlクエリ、記憶プロセス、および高度マッピングをサポートする耐久層フレームです。
MyBatisはほとんどのJDBCコードとパラメータの手動設定と結果セットの検索パッケージを削除しました。
MyBatisは、簡単なXMLまたは注釈を使用して構成と元のマッピングに使用してもよく、インタフェースとJavaのPOJO(Plain Old Java Object)をデータベース内の記録にマッピングしても良い。
各Mybatisアプリケーションは、Sql Session Factoryオブジェクトの例を中心としています。
sql Session Factoryオブジェクトの例は、sql Session FactoryBuiderオブジェクトによって得られます。sql Session FactoryBuiderオブジェクトは、xmlプロファイルまたは従来の使用管理において用意されたConfigrationクラスの例からsql Session Factoryオブジェクトを構築することができる。
【例:構成類を使ってsql Session Factoryを取得する】
このような理由で、xmlのプロファイルが存在すると、MyBatisはピアXMLファイルを自動的に検索してロードします。この場合、クラスパスに基づくBlogMapper.classクラスの名前は、BlogMapper.xmlと同じファイルディレクトリの下にロードされます。もしそうでない場合は、手動でxmlを読み込むように設定する必要があります。
【1】基本的な添削はxmlの設定を調べます。
mybatisの配置ファイル
ここではxmlファイルを使ってsql Session Factoryとsql Sessionを取得します。
parameterTypeとreultTypeはhashmapです。 mapper.xml: test code: reult as follows:
【拡張基本方法】
【1】改ページリスト
パラメータがpojoなら、mybatisは自動的に対象からidを取得します。
通常はget ListPageと連携して使用されます。
以上はmybatisを使ってxmlを添削して、コード解析のすべての内容を調べます。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。
MyBatisはほとんどのJDBCコードとパラメータの手動設定と結果セットの検索パッケージを削除しました。
MyBatisは、簡単なXMLまたは注釈を使用して構成と元のマッピングに使用してもよく、インタフェースとJavaのPOJO(Plain Old Java Object)をデータベース内の記録にマッピングしても良い。
各Mybatisアプリケーションは、Sql Session Factoryオブジェクトの例を中心としています。
sql Session Factoryオブジェクトの例は、sql Session FactoryBuiderオブジェクトによって得られます。sql Session FactoryBuiderオブジェクトは、xmlプロファイルまたは従来の使用管理において用意されたConfigrationクラスの例からsql Session Factoryオブジェクトを構築することができる。
【例:構成類を使ってsql Session Factoryを取得する】
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
//
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
//
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
注意この場合は、マッパークラスを追加するように構成されています。マッパークラスはJavaクラスで、これらのクラスはSQLマッピング文の注釈を含んでいて、xmlファイルの依存を回避していますが、xmlマッピングはほとんどの高級マッピング(例えば、ネストjinマッピング)の時に必要です。このような理由で、xmlのプロファイルが存在すると、MyBatisはピアXMLファイルを自動的に検索してロードします。この場合、クラスパスに基づくBlogMapper.classクラスの名前は、BlogMapper.xmlと同じファイルディレクトリの下にロードされます。もしそうでない場合は、手動でxmlを読み込むように設定する必要があります。
【1】基本的な添削は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="com.web.mapper.userMapper">
<!-- model column jdbcType -->
<resultMap type="User" id="UserMap">
<id property="id" column="id" javaType="int" jdbcType="INTEGER"/>
<result property="name" column="username" javaType="string" jdbcType="VARCHAR"/>
<result property="age" column="age" javaType="int" jdbcType="INTEGER"/>
</resultMap>
<!--
result, column == property Java object。
, :
1. resultMap;
2. hashmap ;
3.
-->
<select id="getUser" parameterType="int" resultMap="UserMap">
select * from t_user where id=#{id}
</select>
<delete id="deleteUser" parameterType="int" >
delete from t_user where id=#{id}
</delete>
<update id="updateUser" parameterType="User" >
update t_user set username=#{name},age=#{age} where id=#{id}
</update>
<insert id="insertUser" parameterType="User" >
insert into t_user(username,age) values(#{name},#{age})
</insert>
<!-- model's attr(name) different from column(username), so the result use UserMap -->
<select id="getUsers" resultMap="UserMap">
select * from t_user
</select>
</mapper>
mybatis.xmlに登録します。このプロファイルはspringと結合するときは必要ありません。mybatisの配置ファイル
<?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>
<properties resource="jdbc.properties"/>
<!-- -->
<typeAliases>
<!-- <typeAlias type="com.web.model.User" alias="User"/> -->
<package name="com.web.model"/>
</typeAliases>
<!--
development :
work :
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/web/mapper/userMapper.xml"/>
<mapper resource="com/web/mapper/orderMapper.xml"/>
<mapper class="com.web.mapperClass.UserMapper"/>
</mappers>
</configuration>
【2】Sql Session Factoryでセッションを取得するここではxmlファイルを使ってsql Session Factoryとsql Sessionを取得します。
public static SqlSessionFactory getFactory(){
/* flow the src dir*/
String resource = "mybatis.xml";
/*MybatisUtils.class.getResourceAsStream(resource)----- it's wrong !!!!
* please distinguish the two up and down
* */
InputStream inputStream = MybatisUtils.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
return factory;
}
SqlSession session = factory.openSession(true);
// ;
/*
:
1.factory.opensession(true);
2.session.commit();
*/
【3】添削バックグラウンドテストコードを調べる
/*use sql xml not annotation*/
@Test
public void testAdd(){
SqlSession session = MybatisUtils.getFactory().openSession();
String statement = "com.web.mapper.userMapper.insertUser";
/*return the effect rows*/
int insert= session.insert(statement, new User("tom5", 15));
/*default is not auto commit*/
session.commit(true);
session.close();
System.out.println("effect rows.."+insert);
}
@Test
public void testSelect(){
/*set auto commit ,which equals to the above*/
SqlSession session = MybatisUtils.getFactory().openSession(true);
String statement = "com.web.mapper.userMapper.getUser";
/*return the effect rows*/
User user = session.selectOne(statement, 3);
System.out.println("effect rows.."+user);
}
@Test
public void testUpdate(){
SqlSession session = MybatisUtils.getFactory().openSession(true);
String statement = "com.web.mapper.userMapper.updateUser";
/*return the effect rows*/
int update= session.update(statement, new User(3,"tom4", 13));
System.out.println("effect rows.."+update);
}
@Test
public void testDelete(){
SqlSession session = MybatisUtils.getFactory().openSession();
String statement = "com.web.mapper.userMapper.deleteUser";
/*return the effect rows*/
int delete= session.delete(statement, 6);
/* commit by yourself*/
session.commit();
System.out.println("effect rows.."+delete);
session.close();
}
@Test
public void testGetUsers(){
SqlSession session = MybatisUtils.getFactory().openSession();
String statement = "com.web.mapper.userMapper.getUsers";
/*return the List<User>*/
List<User> users= session.selectList(statement);
session.commit();
System.out.println("effect rows.."+users);
session.close();
}
Tips:parameterTypeとreultTypeはhashmapです。
<select id="getUserForMap" parameterType="hashmap" resultType="hashmap">
select * from c_user where id=#{id};
</select>
@Test
public void getUserForMap(){
SqlSession session = MybatisUtils.getFactory().openSession();
String statement = "com.web.mapper.userMapper.getUserForMap";
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("id", 1);
/*return the effect rows*/
Object selectOne = session.selectOne(statement, map);
/*default is not auto commit*/
session.commit(true);
session.close();
System.out.println("effect rows.."+selectOne+" ,class :"+selectOne.getClass());
}
effect rows..{id=1, age=12, name=luli} ,class :class java.util.HashMap
以上より、mybatisはパラメータタイプと結果タイプによって自動的に解析パッケージを実装します。【拡張基本方法】
【1】改ページリスト
<select id="getListPage" parameterType="hashmap" resultMap="siteExtendDaoMap">
select id,site_id,site_name,site_number,province,city,area,address,internal_number,longitude,latitude
from tb_site
-- sql
<trim prefix="where" prefixOverrides="AND |OR ">
<if test="checkState!= null and checkState!=''">
and check_state = #{checkState,jdbcType=INTEGER}
</if>
<if test="siteId!= null and siteId!=''">
and site_id like concat('%',#{siteId},'%')
</if>
<if test="siteName!= null and siteName!=''">
and site_name like concat('%',#{siteName},'%')
</if>
<if test="siteNumber!= null and siteNumber!=''">
and site_number like concat('%', #{siteNumber},'%')
</if>
<if test="province!= null and province!=''">
and province = #{province}
</if>
<if test="city!= null and city!=''">
and city = #{city}
</if>
<if test="area!= null and area!=''">
and area = #{area}
</if>
</trim>
--
<if test="sortname!= null and sortname!='' and sortorder!= null and sortorder!=''">
order by ${sortname} ${sortorder}
</if>
--
limit ${(page-1)*pagesize},${pagesize}
</select>
【2】削除方法Cは、対象またはIdによるパラメータがpojoなら、mybatisは自動的に対象からidを取得します。
<delete id="delete" parameterType="User">
delete from tb_user
where
id = #{id}
</delete>
<delete id="deleteById" parameterType="long">
delete from tb_user
where
id = #{id}
</delete>
【3】id listによるデータの削除
<delete id="deleteByIds">
delete from tb_user
where id in
-- foreach
<foreach collection="list" item="id" open="(" separator=","close=")"> #{id}
</foreach>
</delete>
【4】getRows通常はget ListPageと連携して使用されます。
<select id="getRows" parameterType="hashmap" resultType="long">
select count(*) from tb_sys_role
<if test="keySysRole!= null">
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="keySysRole.id!= null">
and id = #{keySysRole.id}
</if>
<if test="keySysRole.name!= null and keySysRole.name!=''">
and name = #{keySysRole.name}
</if>
<if test="keySysRole.available!= null and keySysRole.available!=''">
and available = #{keySysRole.available}
</if>
</trim>
</if>
</select>
締め括りをつける以上はmybatisを使ってxmlを添削して、コード解析のすべての内容を調べます。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。