標籤:方法 一個使用者 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動態代理開發