學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您:
想系統/深入學習某技術知識點…
一個人摸索學習很難堅持,想組團高效學習…
想寫博客但無從下手,急需寫作干貨注入能量…
熱愛寫作,愿意讓自己成為更好的人…
文章目錄
- 前言
- 一、核心配置文件詳解
- 二、默認的類型別名
- 三、MyBatis的增刪改查
- 四、MyBatis獲取參數值的兩種方式
- 1、單個字面量類型的參數
- 2、多個字面量類型的參數
- 3、map集合類型的參數
- 4、實體類類型的參數
- 5、使用@Param標識參數
- 總結
前言
一、核心配置文件詳解
二、默認的類型別名
三、MyBatis的增刪改查
四、MyBatis獲取參數值的兩種方式
1、單個字面量類型的參數
2、多個字面量類型的參數
3、map集合類型的參數
4、實體類類型的參數
5、使用@Param標識參數
一、核心配置文件詳解
核心配置文件中的標簽必須按照固定的順序(有的標簽可以不寫,但順序一定不能亂):
properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//MyBatis.org//DTD Config 3.0//EN""http://MyBatis.org/dtd/MyBatis-3-config.dtd">
<configuration><!--引入properties文件,此時就可以${屬性名}的方式訪問屬性值--><properties resource="jdbc.properties"></properties><settings><!--將表中字段的下劃線自動轉換為駝峰--><setting name="mapUnderscoreToCamelCase" value="true"/><!--開啟延遲加載--><setting name="lazyLoadingEnabled" value="true"/></settings><typeAliases><!--typeAlias:設置某個具體的類型的別名屬性:type:需要設置別名的類型的全類名alias:設置此類型的別名,且別名不區分大小寫。若不設置此屬性,該類型擁有默認的別名,即類名--><!--<typeAlias type="com.atguigu.mybatis.bean.User"></typeAlias>--><!--<typeAlias type="com.atguigu.mybatis.bean.User" alias="user"></typeAlias>--><!--以包為單位,設置改包下所有的類型都擁有默認的別名,即類名且不區分大小寫--><package name="com.atguigu.mybatis.bean"/></typeAliases><!--environments:設置多個連接數據庫的環境屬性:default:設置默認使用的環境的id--><environments default="mysql_test"><!--environment:設置具體的連接數據庫的環境信息屬性:id:設置環境的唯一標識,可通過environments標簽中的default設置某一個環境的id,表示默認使用的環境--><environment id="mysql_test"><!--transactionManager:設置事務管理方式屬性:type:設置事務管理方式,type="JDBC|MANAGED"type="JDBC":設置當前環境的事務管理都必須手動處理type="MANAGED":設置事務被管理,例如spring中的AOP--><transactionManager type="JDBC"/><!--dataSource:設置數據源屬性:type:設置數據源的類型,type="POOLED|UNPOOLED|JNDI"type="POOLED":使用數據庫連接池,即會將創建的連接進行緩存,下次使用可以從緩存中直接獲取,不需要重新創建type="UNPOOLED":不使用數據庫連接池,即每次使用連接都需要重新創建type="JNDI":調用上下文中的數據源--><dataSource type="POOLED"><!--設置驅動類的全類名--><property name="driver" value="${jdbc.driver}"/><!--設置連接數據庫的連接地址--><property name="url" value="${jdbc.url}"/><!--設置連接數據庫的用戶名--><property name="username" value="${jdbc.username}"/><!--設置連接數據庫的密碼--><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>
二、默認的類型別名
三、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>
- 查詢一個實體類對象
<!--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>
- 注意:
- 查詢的標簽select必須設置屬性resultType或resultMap,用于設置實體類和數據庫表的映射關系
- resultType:自動映射,用于屬性名和表中字段名一致的情況
- resultMap:自定義映射,用于一對多或多對一或字段名和屬性名不一致的情況
- 當查詢的數據為多條時,不能使用實體類作為返回值,只能使用集合,否則會拋出異常TooManyResultsException;但是若查詢的數據只有一條,可以使用實體類或集合作為返回值
- 查詢的標簽select必須設置屬性resultType或resultMap,用于設置實體類和數據庫表的映射關系
四、MyBatis獲取參數值的兩種方式
- MyBatis獲取參數值的兩種方式:${}和#{}
- ${}的本質就是字符串拼接,#{}的本質就是占位符賦值
- ${}使用字符串拼接的方式拼接sql,若為字符串類型或日期類型的字段進行賦值時,需要手動加單引號;但是#{}使用占位符賦值的方式拼接sql,此時為字符串類型或日期類型的字段進行賦值時,可以自動添加單引號
1、單個字面量類型的參數
- 若mapper接口中的方法參數為單個的字面量類型,此時可以使用${}和#{}以任意的名稱(最好見名識意)獲取參數的值,注意${}需要手動加單引號
<!--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、多個字面量類型的參數
- 若mapper接口中的方法參數為多個時,此時MyBatis會自動將這些參數放在一個map集合中
- 以arg0,arg1…為鍵,以參數為值;
- 以param1,param2…為鍵,以參數為值;
- 因此只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應的值,注意${}需要手動加單引號。
- 使用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集合類型的參數
- 若mapper接口中的方法需要的參數為多個時,此時可以手動創建map集合,將這些數據放在map中只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應的值,注意${}需要手動加單引號
<!--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、實體類類型的參數
- 若mapper接口中的方法參數為實體類對象時此時可以使用${}和#{},通過訪問實體類對象中的屬性名獲取屬性值,注意${}需要手動加單引號
<!--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標識參數
- 可以通過@Param注解標識mapper接口中的方法參數,此時,會將這些參數放在map集合中
- 以@Param注解的value屬性值為鍵,以參數為值;
- 以param1,param2…為鍵,以參數為值;
- 只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應的值,注意${}需要手動加單引號
<!--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");
}
- 建議分成兩種情況進行處理
- 實體類類型的參數
- 使用@Param標識參數
總結
以上就是Mybatis之核心配置文件詳解、默認類型別名、Mybatis獲取參數值的兩種方式的相關知識點,希望對你有所幫助。
積跬步以至千里,積怠惰以至深淵。時代在這跟著你一起努力哦!