1. 程式人生 > >Mybatis基礎整理

Mybatis基礎整理

Mybatis

  1. 建立Java工程
  2. 加入jar包
  3. 配置log4j.properties
  4. 在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>
  1. 查詢
<!-- 根據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>
  1. 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>
  1. 刪除
<!-- 刪除使用者 -->
    <delete id="deleteUserById" parameterType="int">
        delete from user where id=#{id}
    </delete>
  1. 修改
<!-- 更新使用者 -->
    <update id="updateUser" parameterType="com.demo.mybatis.po.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
        where id=#{id}
    </update>
  1. SqlSessionFactoryBuilder只需要使用一次,通常以單例模式管理SqlSessionFactory
  2. 在finally中關閉SqlSession
  3. Mapper動態代理開發規範
    • Mapper.xml中的namespace與mapper介面的類路徑相同
    • Mapper介面方法名和Mapper.xml中定義的每個statement的id相同
    • Mapper介面方法的輸入引數型別和mapper.xml中定義的每個sql的parameterType型別相同
    • Mapper介面方法的輸出引數型別和mapper.xml中定義的每個sql的resultType的型別相同
  4. 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>
  1. 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; 
}
  1. 載入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>