Mybatis架構三:DAO層開發、Mapper動態代理開發

來源:互聯網
上載者:User

標籤:方法   一個使用者   href   junit   問題   預留位置   增刪改   type   mybatis   

這裡是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html

接下來做到了簡單的增刪改查:http://www.cnblogs.com/xuyiqing/p/8601506.html

 

但是發現代碼重複過多等問題

接下來整合并實現DAO開發:

 

一:原始DAO開發:

package dao;import pojo.User;public interface UserDao {    public User selectUserById(Integer id);}
package dao;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import pojo.User;public class UserDaoImpl implements UserDao {    //注入    private SqlSessionFactory sqlSessionFactory;    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {        this.sqlSessionFactory = sqlSessionFactory;    }        //通過使用者ID查詢一個使用者    public User selectUserById(Integer id){        SqlSession sqlSession = sqlSessionFactory.openSession();        return sqlSession.selectOne("test.findUserById", id);    }    //通過使用者名稱稱模糊查詢    public List<User> selectUserByUsername(Integer id){        SqlSession sqlSession = sqlSessionFactory.openSession();        return sqlSession.selectList("test.findUserById", id);    }}

測試類別:

package junit;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import dao.UserDao;import dao.UserDaoImpl;import pojo.User;public class DaoTest {    public SqlSessionFactory sqlSessionFactory;    @Before    public void before() throws Exception {        String resource = "sqlMapConfig.xml";        InputStream in = Resources.getResourceAsStream(resource);        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);    }    @Test    public void testDao() throws Exception {        UserDao userDao = new UserDaoImpl(sqlSessionFactory);        User user = userDao.selectUserById(10);        System.out.println(user);    }}

 

 

但是還是發現代碼重複、浪費資源等問題:

於是想到Mapper動態代理開發:

package mapper;import pojo.User;public interface UserMapper {        //遵循四個原則    //介面 方法名  == User.xml 中 id 名    //傳回值類型  與  Mapper.xml檔案中傳回值類型要一致    //方法的入參類型 與Mapper.xml中入參的類型要一致    //命名空間 綁定此介面        //這裡如果返回的是一個對象,則調用selectOne方法    //如果是List,則調用selectlist方法    public User findUserById(Integer id);    }

 

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 寫Sql語句   --><mapper namespace="mapper.UserMapper">    <!-- 通過ID查詢一個使用者 -->    <select id="findUserById" parameterType="Integer" resultType="pojo.User">        select * from user where id = #{v}    </select>        <!-- //根據使用者名稱稱模糊查詢使用者列表    #{}    select * from user where id = ?    預留位置  ? ==  ‘五‘    ${}    select * from user where username like ‘%五%‘  字串拼接           -->    <select id="findUserByUsername" parameterType="String" resultType="pojo.User">        select * from user where username like "%"#{haha}"%"    </select>        <!-- 添加使用者 -->    <insert id="insertUser" parameterType="pojo.User">        <selectKey keyProperty="id" resultType="Integer" order="AFTER">            select LAST_INSERT_ID()        </selectKey>        insert into user (username,birthday,address,sex)         values (#{username},#{birthday},#{address},#{sex})    </insert>        <!-- 更新 -->    <update id="updateUserById" parameterType="pojo.User">        update user         set username = #{username},sex = #{sex},birthday = #{birthday},address = #{address}        where id = #{id}    </update>        <!-- 刪除 -->    <delete id="deleteUserById" parameterType="Integer">        delete from user         where id = #{vvvvv}    </delete></mapper>

 

主設定檔sqlMapConfig.xml:

<?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>    <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/mybatis?characterEncoding=utf-8" />                <property name="username" value="root" />                <property name="password" value="xuyiqing" />            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="mapper/UserMapper.xml"/>     </mappers></configuration>

 

 

測試類別:

package junit;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import mapper.UserMapper;import pojo.User;public class MybatisMapperTest {        @Test    public void testMapper() throws Exception {        String resource = "sqlMapConfig.xml";        InputStream in = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);        SqlSession sqlSession = sqlSessionFactory.openSession();                //SqlSession自動為介面產生一個實作類別         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        User user = userMapper.findUserById(10);        System.out.println(user);    }}

 

 

通常情況下,建議使用Mapper動態代理開發

 

Mybatis架構三:DAO層開發、Mapper動態代理開發

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.