Mybatis基礎整理
阿新 • • 發佈:2019-01-30
Mybatis
- 建立Java工程
- 加入jar包
- 配置log4j.properties
- 在classpath下建立SqlMapConfig.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>
<!-- 和spring整合後 environments配置將廢除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理-->
<transactionManager type="JDBC" />
<!-- 資料庫連線池-->
<dataSource type="POOLED">
<property name="driver" value ="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments >
</configuration>
這是Mybatis的核心配置檔案
5. POJO類
6. sql對映檔案,在classpath下的sqlmap目錄下建立sql對映檔案User.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="test">
</mapper>
namespace:名稱空間,用於隔離sql活動
7. 載入對映檔案 ,將User.xml新增在SqlMapConfig.xml中
<mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers>
- 查詢
<!-- 根據id獲取使用者資訊 -->
<select id="findUserById" parameterType="int" resultType="com.demo.mybatis.po.User">
select * from user where id = #{id}
</select>
parameterType:定義輸入到sql中的對映型別。#{id}表示使用preparedstatement
resultType:定義結果對映型別
9. 模糊查詢
<!-- 自定義條件查詢使用者列表 -->
<select id="findUserByUsername" parameterType="string"
resultType="com.demo.mybatis.po.User">
select * from user where username like '%${value}%'
</select>
parameter:定義輸入到sql中的對映型別,${value}
表示使用引數將${value}
替換,做字串的拼接
10. #{}
和${}
#{}
表示一個佔位符號,通過#{}
可以實現preparedStatement向佔位符中設定值,
自動進行java型別和jdbc型別轉換,#{}可以有效防止sql注入。 #{}可以接收簡單型別值或pojo屬性值。
如果parameterType傳輸單個簡單型別值,#{}括號中可以是value或其它名稱。
${}
表示拼接sql串,通過${}
可以將parameterType 傳入的內容拼接在sql中且不進行jdbc型別轉換,
${}
可以接收簡單型別值或pojo屬性值,如果parameterType傳輸單個簡單型別值,${}
括號中只能是value。
11. selectOne(),selectList()
12. 插入
<!-- 新增使用者 -->
<insert id="insertUser" parameterType="com.demo.mybatis.po.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
- mysql自增主鍵返回
<insert id="insertUser" parameterType="com.demo.mybatis.po.User">
<!-- selectKey將主鍵返回,需要再返回 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address});
</insert>
此時去user.getId()就能取得id值了,由於mysql的自增主鍵是插入後才生成,所以使用AFTER
14. mysql使用uuid實現主鍵
<insert id="insertUser" parameterType="com.demo.mybatis.po.User">
<selectKey resultType="java.lang.String" order="BEFORE"
keyProperty="id">
select uuid()
</selectKey>
insert into user(id,username,birthday,sex,address)
values(#{id},#{username},#{birthday},#{sex},#{address})
</insert>
- 刪除
<!-- 刪除使用者 -->
<delete id="deleteUserById" parameterType="int">
delete from user where id=#{id}
</delete>
- 修改
<!-- 更新使用者 -->
<update id="updateUser" parameterType="com.demo.mybatis.po.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id=#{id}
</update>
- SqlSessionFactoryBuilder只需要使用一次,通常以單例模式管理SqlSessionFactory
- 在finally中關閉SqlSession
- Mapper動態代理開發規範
- Mapper.xml中的namespace與mapper介面的類路徑相同
- Mapper介面方法名和Mapper.xml中定義的每個statement的id相同
- Mapper介面方法的輸入引數型別和mapper.xml中定義的每個sql的parameterType型別相同
- Mapper介面方法的輸出引數型別和mapper.xml中定義的每個sql的resultType的型別相同
- Mapper.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.demo.mybatis.mapper.UserMapper">
<!-- 根據id獲取使用者資訊 -->
<select id="findUserById" parameterType="int" resultType="com.demo.mybatis.po.User">
select * from user where id = #{id}
</select>
<!-- 自定義條件查詢使用者列表 -->
<select id="findUserByUsername" parameterType="java.lang.String"
resultType="com.demo.mybatis.po.User">
select * from user where username like '%${value}%'
</select>
<!-- 新增使用者 -->
<insert id="insertUser" parameterType="com.demo.mybatis.po.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
</mapper>
- mapper介面
Public interface UserMapper {
//根據使用者id查詢使用者資訊
public User findUserById(int id) throws Exception;
//查詢使用者列表
public List<User> findUserByUsername(String username) throws Exception;
//新增使用者資訊
public void insertUser(User user)throws Exception;
}
- 載入UserMapper.xml檔案,
<!-- 載入對映檔案 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
修改SqlMapConfig.xml
23. SqlMapConfig.xml自定義別名
<typeAliases>
<!-- 單個別名定義 -->
<typeAlias alias="user" type="com.demo.mybatis.po.User"/>
<!-- 批量別名定義,掃描整個包下的類,別名為類名(首字母大寫或小寫都可以) -->
<package name="com.demo.mybatis.po"/>
<package name="onepackage"/>
</typeAliases>