1.使用environment可以配置多個(gè)數(shù)據(jù)庫(kù)信姓,用id來(lái)標(biāo)識(shí)
2.transactionManager的type有哪些
JDBC鸵隧,MANAGED
4.properties
1.加載配置文件
2.配置鍵值對(duì)
注意:如果resource和property,resource優(yōu)先級(jí)高
5.typeAliases
1.起別名
用類(lèi)名
6.databaseIdProvider+databaseid
1).給數(shù)據(jù)庫(kù)起別名
2)在ststement中用別名
mydatis根據(jù)url可以自動(dòng)當(dāng)前使用的是什么數(shù)據(jù)庫(kù)意推,然后使用哪個(gè)
7.mapper中使用namespace有什么用
1如果有相同的statementid的時(shí)候掰派,使用namespace來(lái)區(qū)別
2.使用mapper使用接口開(kāi)發(fā)dao時(shí),namespace與接口全類(lèi)名一致
8.增刪改查
id:statement的唯一標(biāo)識(shí)左痢,或者說(shuō)是我們調(diào)用的方法名
parameterType:傳入?yún)?shù)的數(shù)據(jù)類(lèi)型靡羡,基本數(shù)據(jù)類(lèi)型+引用數(shù)據(jù)類(lèi)型(必須寫(xiě))
resultType:返回的數(shù)據(jù)類(lèi)型
parameterType和resultTYpe都可以使用別名來(lái)表示數(shù)據(jù)類(lèi)名
9.mabatis中數(shù)據(jù)類(lèi)型的別名
Interger Interger,int
int _int
10.#{}的作用
獲取傳入數(shù)據(jù)
11.mapper接口開(kāi)發(fā)的四大要求俊性?
1.類(lèi)名與namespace的值就是對(duì)象接口的全類(lèi)名
2.id的值就是抽象方法
mybatis概念
mybatis入門(mén)
增刪改
增
改
刪
Mapper接口開(kāi)發(fā)
動(dòng)態(tài)sql
if
where
choose when otherwise
set
trim
foreach
mybatis概念
概念:一個(gè)持久層框架
作用:ORM將sql語(yǔ)句映射成實(shí)體類(lèi)
特點(diǎn):
巧靈活
半自動(dòng)化
使用與中小型項(xiàng)目的開(kāi)發(fā)
mybatis入門(mén)
1略步、創(chuàng)建mybatis-config.xml文件
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/bank?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
2、創(chuàng)建映射文件UserMapper.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="user">
<select id="selectUser" resultType="com.hemi.mybatis.bean.User">
select * from user where uid=1;
</select>
</mapper>
3定页、獲取xml配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
4趟薄、創(chuàng)建SqlSessionFactory
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
5、獲取SqlSession
SqlSession sqlSession = factory.openSession();
6典徊、調(diào)用SqlSession的selectOne(命名空間.id名稱(chēng));
Object object = sqlSession.selectOne("user.selectUser");
7杭煎、關(guān)閉SqlSession
sqlSession.close();
增刪改
增
<insert id="insertUser" parameterType="com.hemi.mybatis.bean.User">
<!-- 通過(guò)#{屬性名}來(lái)獲取對(duì)象的值 -->
insert into user (username,password) values(#{username},#{password});
</insert>
改
<update id="updateUser" parameterType="com.hemi.mybatis.bean.User">
update user set username=#{username},password=#{password} where uid=#{uid}
</update>
刪
Some_Text
<delete id="deleteUser" parameterType="int">
delete from user where uid=#{value}
</delete>
Mapper接口開(kāi)發(fā)
一、定義一個(gè)接口
public interface TypeMapper {
Type selectType(int typeid);
}
二卒落、定義一個(gè)mapper.xml映射文件
mapper文件的要求:
namespace的值就是對(duì)象接口的全類(lèi)名羡铲,并且類(lèi)名和xml文件名保持一致
id的值就是抽象方法
resultType的值必須和抽象方法的返回值一致
parameterType的值和抽象方法的參數(shù)類(lèi)型一致
注意 mapper.xml文件的約束是mapper.dtd,不是config.dtd
三儡毕、使用
將mybatis入門(mén)步驟中的步驟六改為如下代碼:
TypeMapper mapper=sqlSession.getMapper(TypeMapper.class);
Type type=mapper.selectType(1);
動(dòng)態(tài)sql
if
SELECT * FROM good INNER JOIN type ON good.type = type.typeid where 1=1
<if test="gname !=null and gname !=''">
and gname like concat('%',#{gname},'%')
</if>
注意:
1也切、字符串的拼接建議使用concat來(lái)代替${}
2、判斷條件中獲取數(shù)據(jù)不用加#{},與el表達(dá)式不一樣
where
作用where可以自動(dòng)去除第一個(gè)and
<where>
<if test="gname !=null and gname !=''">
and gname like concat('%',#{gname},'%')
</if>
<if test="typename !=null and typename!=''">
and typename like concat('%',#{typename},'%')
</if>
</where>
choose when otherwise
作用:組合使用雷恃,相當(dāng)于if else if else
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = 'ACTIVE'
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
set
update good
<set>
<if test="gname!=null and gname!=''">
gname=#{gname},
</if>
<if test="gprice!=null and gprice!=''">
gprice=#{gprice}
</if>
</set>
where gid=#{gid}
trim
作用:去除多余字符串
兩種常見(jiàn)的用法
1疆股、where and
prefix:字首 prefixOverrides:去除第一個(gè)指定的字符串
select * from good
<trim prefix="where" prefixOverrides="and|or">
<!--添加where在前面,并且去除第一個(gè)and-->
<if test="gname !=null and gname !=''">
and gname like concat('%',#{gname},'%')
</if>
<if test="typename !=null and typename!=''">
and typename like concat('%',#{typename},'%')
</if>
</trim>
2倒槐、set ,
prefix:字首 suffixOverrides:去除最后指定的字符串
update good
<trim prefix="set" suffixOverrides=",">
<!--添加set在前面旬痹,并且去除最后一個(gè),-->
<if test="gname!=null and gname!=''">
gname=#{gname},
</if>
<if test="gprice!=null and gprice!=''">
gprice=#{gprice},
</if>
</trim>
foreach
作用:動(dòng)態(tài)循環(huán)拼接sql部分內(nèi)容
1、open代表在集合前面添加的字符串
2讨越、close代表在集合后面添加的字符串
3唱凯、separator代表集合分割使用的字符串
4、collection代表被循環(huán)的集合谎痢,值可以是list磕昼、map、array
5节猿、常見(jiàn)用法票从,in的語(yǔ)句
<select id="selectGoodByGid" parameterType="list" resultType="Good">
select gid,gname,gprice,count,type typeid from good
<where>
gid in
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</where>
</select>
resultMap
作用: 1、可以將表字段與javabean對(duì)象屬性名進(jìn)行映射 2滨嘱、將映射級(jí)抽取出來(lái)峰鄙,可以給多個(gè)statement所使用
1、字段名和屬性名一致時(shí)可以不用寫(xiě)映射關(guān)系
mybatis有個(gè)配置太雨,配置了自動(dòng)映射
關(guān)聯(lián)嵌套查詢(xún)
<mapper namespace="com.dao.GoodMapper">
<select id="selectType" parameterType="String" resultMap="GoodResultMap">
select
gid,good_name,gprice,count,type from good where gid=1
</select>
<!-- 關(guān)聯(lián)嵌套查詢(xún)吟榴,把連接表分成兩個(gè)表,這樣效率更高 -->
<resultMap type="Good" id="GoodResultMap">
<result column="good_name" property="gname" />
<association property="type" javaType="Type" select="selectTypeById"
column="type"></association>
</resultMap>
<select id="selectTypeById" resultType="Type">
select * from type where
typeid=#{value}
</select>
</mapper>
多層嵌套
<mapper namespace="com.dao.UserOrderMapper">
<!--這里粘貼復(fù)制地址名后囊扳,記得注意驗(yàn)證 -->
<!-- 此處的id與同名Java類(lèi)的接口中定義的要一致 -->
<select id="selectUserOrder" parameterType="list"
resultMap="UserOrderResultMapper">
<!-- 這里首先是建立一個(gè)新類(lèi)UserOrder吩翻,連表查詢(xún) -->
select gorder.* ,user.user_name from gorder inner join user
on
gorder.uid=user.uid where gorder.uid=#{value}
<!-- 需要注意兩個(gè)表中的重名問(wèn)題 -->
</select>
<!-- 多層嵌套 -->
<resultMap type="UserOrder" id="UserOrderResultMapper">
<id column="uid" property="uid" />
<collection property="orderList" ofType="Order" resultMap="OrderResultMap">
<!--ofType這個(gè)屬性用來(lái)區(qū)分 JavaBean(或字段)屬性類(lèi)型和集合包含的類(lèi)型 -->
</collection>
<!-- resultMap 與id是對(duì)應(yīng)的 -->
</resultMap>
<resultMap type="Order" id="OrderResultMap">
<id column="id" property="id" />
<result column="gid" property="gid" />
<result column="uid" property="uid" />
<result column="status" property="status" />
<result column="time" property="time" />
</resultMap>
</mapper>