Mybatis核心配置文件、默認(rèn)類型別名、Mybatis獲取參數(shù)值的兩種方式(實(shí)例代碼)
一、核心配置文件詳解
核心配置文件中的標(biāo)簽必須按照固定的順序(有的標(biāo)簽可以不寫,但順序一定不能亂):
properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers
<?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文件,此時就可以${屬性名}的方式訪問屬性值-->
<properties resource="jdbc.properties"></properties>
<settings>
<!--將表中字段的下劃線自動轉(zhuǎn)換為駝峰-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--開啟延遲加載-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<typeAliases>
<!--
typeAlias:設(shè)置某個具體的類型的別名
屬性:
type:需要設(shè)置別名的類型的全類名
alias:設(shè)置此類型的別名,且別名不區(qū)分大小寫。若不設(shè)置此屬性,該類型擁有默認(rèn)的別名,即類名
-->
<!--<typeAlias type="com.atguigu.mybatis.bean.User"></typeAlias>-->
<!--<typeAlias type="com.atguigu.mybatis.bean.User" alias="user">
</typeAlias>-->
<!--以包為單位,設(shè)置改包下所有的類型都擁有默認(rèn)的別名,即類名且不區(qū)分大小寫-->
<package name="com.atguigu.mybatis.bean"/>
</typeAliases>
<!--
environments:設(shè)置多個連接數(shù)據(jù)庫的環(huán)境
屬性:
default:設(shè)置默認(rèn)使用的環(huán)境的id
-->
<environments default="mysql_test">
<!--
environment:設(shè)置具體的連接數(shù)據(jù)庫的環(huán)境信息
屬性:
id:設(shè)置環(huán)境的唯一標(biāo)識,可通過environments標(biāo)簽中的default設(shè)置某一個環(huán)境的id,表示默認(rèn)使用的環(huán)境
-->
<environment id="mysql_test">
<!--
transactionManager:設(shè)置事務(wù)管理方式
屬性:
type:設(shè)置事務(wù)管理方式,type="JDBC|MANAGED"
type="JDBC":設(shè)置當(dāng)前環(huán)境的事務(wù)管理都必須手動處理
type="MANAGED":設(shè)置事務(wù)被管理,例如spring中的AOP
-->
<transactionManager type="JDBC"/>
<!--
dataSource:設(shè)置數(shù)據(jù)源
屬性:
type:設(shè)置數(shù)據(jù)源的類型,type="POOLED|UNPOOLED|JNDI"
type="POOLED":使用數(shù)據(jù)庫連接池,即會將創(chuàng)建的連接進(jìn)行緩存,下次使用可以從緩存中直接獲取,不需要重新創(chuàng)建
type="UNPOOLED":不使用數(shù)據(jù)庫連接池,即每次使用連接都需要重新創(chuàng)建
type="JNDI":調(diào)用上下文中的數(shù)據(jù)源
-->
<dataSource type="POOLED">
<!--設(shè)置驅(qū)動類的全類名-->
<property name="driver" value="${jdbc.driver}"/>
<!--設(shè)置連接數(shù)據(jù)庫的連接地址-->
<property name="url" value="${jdbc.url}"/>
<!--設(shè)置連接數(shù)據(jù)庫的用戶名-->
<property name="username" value="${jdbc.username}"/>
<!--設(shè)置連接數(shù)據(jù)庫的密碼-->
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<!-- <mapper resource="UserMapper.xml"/> -->
<!--
以包為單位,將包下所有的映射文件引入核心配置文件
注意:
1. 此方式必須保證mapper接口和mapper映射文件必須在相同的包下
2. mapper接口要和mapper映射文件的名字一致
-->
<package name="com.atguigu.mybatis.mapper"/>
</mappers>
</configuration>二、默認(rèn)的類型別名

三、MyBatis的增刪改查
添加
<!--int insertUser();--> <insert id="insertUser"> insert into t_user values(null,'admin','123456',23,'男','12345@qq.com') </insert>
刪除
<!--int deleteUser();-->
<delete id="deleteUser">
delete from t_user where id = 6
</delete>修改
<!--int updateUser();-->
<update id="updateUser">
update t_user set username = '張三' where id = 5
</update>查詢一個實(shí)體類對象
<!--User getUserById();--> <select id="getUserById" resultType="com.atguigu.mybatis.bean.User"> select * from t_user where id = 2 </select>
查詢集合
<!--List<User> getUserList();--> <select id="getUserList" resultType="com.atguigu.mybatis.bean.User"> select * from t_user </select>
注意:
- 查詢的標(biāo)簽select必須設(shè)置屬性resultType或resultMap,用于設(shè)置實(shí)體類和數(shù)據(jù)庫表的映射關(guān)系
- resultType:自動映射,用于屬性名和表中字段名一致的情況
- resultMap:自定義映射,用于一對多或多對一或字段名和屬性名不一致的情況
- 當(dāng)查詢的數(shù)據(jù)為多條時,不能使用實(shí)體類作為返回值,只能使用集合,否則會拋出異常TooManyResultsException;但是若查詢的數(shù)據(jù)只有一條,可以使用實(shí)體類或集合作為返回值
四、MyBatis獲取參數(shù)值的兩種方式
- MyBatis獲取參數(shù)值的兩種方式:${}和#{}
- ${}的本質(zhì)就是字符串拼接,#{}的本質(zhì)就是占位符賦值
- ${}使用字符串拼接的方式拼接sql,若為字符串類型或日期類型的字段進(jìn)行賦值時,需要手動加單引號;但是#{}使用占位符賦值的方式拼接sql,此時為字符串類型或日期類型的字段進(jìn)行賦值時,可以自動添加單引號
1、單個字面量類型的參數(shù)
若mapper接口中的方法參數(shù)為單個的字面量類型,此時可以使用${}和#{}以任意的名稱(最好見名識意)獲取參數(shù)的值,注意${}需要手動加單引號
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
select * from t_user where username = #{username}
</select><!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
select * from t_user where username = '${username}'
</select>2、多個字面量類型的參數(shù)
- 若mapper接口中的方法參數(shù)為多個時,此時MyBatis會自動將這些參數(shù)放在一個map集合中
以arg0,arg1…為鍵,以參數(shù)為值;
以param1,param2…為鍵,以參數(shù)為值;
- 因此只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應(yīng)的值,注意${}需要手動加單引號。
- 使用arg或者param都行,要注意的是,arg是從arg0開始的,param是從param1開始的
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = #{arg0} and password = #{arg1}
</select><!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = '${param1}' and password = '${param2}'
</select>3、map集合類型的參數(shù)
若mapper接口中的方法需要的參數(shù)為多個時,此時可以手動創(chuàng)建map集合,將這些數(shù)據(jù)放在map中只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應(yīng)的值,注意${}需要手動加單引號
<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="checkLoginByMap" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>@Test
public void checkLoginByMap() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("usermane","admin");
map.put("password","123456");
User user = mapper.checkLoginByMap(map);
System.out.println(user);
}4、實(shí)體類類型的參數(shù)
若mapper接口中的方法參數(shù)為實(shí)體類對象時此時可以使用${}和#{},通過訪問實(shí)體類對象中的屬性名獲取屬性值,注意${}需要手動加單引號
<!--int insertUser(User user);-->
<insert id="insertUser">
insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>@Test
public void insertUser() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
User user = new User(null,"Tom","123456",12,"男","123@321.com");
mapper.insertUser(user);
}5、使用@Param標(biāo)識參數(shù)
- 可以通過@Param注解標(biāo)識mapper接口中的方法參數(shù),此時,會將這些參數(shù)放在map集合中
- 以@Param注解的value屬性值為鍵,以參數(shù)為值;
- 以param1,param2…為鍵,以參數(shù)為值;
- 只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應(yīng)的值,注意${}需要手動加單引號
<!--User CheckLoginByParam(@Param("username") String username, @Param("password") String password);-->
<select id="CheckLoginByParam" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>@Test
public void checkLoginByParam() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
mapper.CheckLoginByParam("admin","123456");
}建議分成兩種情況進(jìn)行處理
- 實(shí)體類類型的參數(shù)
- 使用@Param標(biāo)識參數(shù)
總結(jié)
以上就是Mybatis之核心配置文件詳解、默認(rèn)類型別名、Mybatis獲取參數(shù)值的兩種方式的相關(guān)知識點(diǎn),希望對你有所幫助。
到此這篇關(guān)于Mybatis核心配置文件、默認(rèn)類型別名、Mybatis獲取參數(shù)值的兩種方式的文章就介紹到這了,更多相關(guān)Mybatis獲取參數(shù)值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Component和Configuration注解區(qū)別實(shí)例詳解
這篇文章主要為大家介紹了Component和Configuration注解區(qū)別實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
如何利用Java輸出鏈表中倒數(shù)第k個結(jié)點(diǎn)
SpringBoot啟動后執(zhí)行方法的五種實(shí)現(xiàn)方式
詳解springboot啟動時是如何加載配置文件application.yml文件

