mybatis框架搭建
阿新 • • 發佈:2019-01-14
1.匯入jar包
2.配置檔案
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?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> --> <properties resource="db.properties"/> <!-- 自定義別名 <typeAliases> <typeAlias type="com.huida.pojo.User" alias="user"/> 包掃描的方式是批量定義別名,定以後別名等於類名,不區分大小寫 <package name="com.huida.pojo"/> </typeAliases> --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <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="User.xml"/> <mapper resource="com/huida/mapper/UserMapper.xml"/> <!-- 介面名稱和對映檔名稱相同且在同一個目錄 <mapper class="com.huida.mapper.UserMapper"/> <package name="com.huida.mapper"/> --> </mappers> </configuration>
3.pojo類在這裡就省略了
4.建立mapper包結構
UserMapper.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代理藉口編寫規則 1.對映檔案中namespace等於介面全路徑 2.對映檔案中sql語句id等於介面方法名稱 3.對映檔案中傳入引數型別等於介面方法的傳入引數型別 4.返回結果集一樣 --> <mapper namespace="com.huida.mapper.UserMapper"> <select id="queryUserById" parameterType="java.lang.Integer" resultType="com.huida.pojo.User"> SELECT * FROM USER WHERE id=#{id} </select> <!-- 使用包裝型別查詢使用者 使用ognl從物件中取屬性值,如果是包裝物件,可以使用 user.username --> <select id="findUserByQueryVo" parameterType="com.huida.pojo.QueryVo" resultType="com.huida.pojo.User"> SELECT * FROM USER WHERE username LIKE '%${user.username}%' </select> <!-- 獲取使用者列表總數 --> <select id="findUserCount" resultType="int"> select count(*) from user </select> <!-- 動態sql,查詢條件拼接 --> <select id="findUserByUsernameAndSex" parameterType="com.huida.pojo.User" resultType="com.huida.pojo.User"> select * from user <include refid="queryUser_username_sex"></include> </select> <sql id="queryUser_username_sex"> <!-- where標籤可以自動的處理第一個and --> <where> <if test="username!=null and username!=''"> and username like #{username} </if> <if test="sex!=null and sex!=''"> and sex=#{sex} </if> </where> </sql> <select id="findUserByIds" parameterType="com.huida.pojo.QueryVo" resultType="com.huida.pojo.User"> select * from user <where> <if test="ids!=null and ids.size>0"> <foreach collection="ids" item="id" open="and id in (" close=")" separator=","> #{id} </foreach> </if> </where> </select> <!-- 查詢訂單 --> <select id="findOrderAndUser1" resultType="com.huida.pojo.OrderCustom"> SELECT a.*,b.id uid,username,birthday,sex,address FROM orders a,USER b WHERE a.user_id=b.id </select> <!-- 手動對映 --> <select id="findOrderAndUser2" resultMap="OrdersAndUserResultMap"> SELECT a.*,b.id uid,username,birthday,sex,address FROM orders a,USER b WHERE a.user_id=b.id </select> <resultMap type="com.huida.pojo.Orders" id="OrdersAndUserResultMap"> <!-- 主鍵 column:資料庫中欄位名稱 property:Java中pojo對應的欄位名 --> <id column="id" property="id"/> <!-- 非主鍵 --> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <!-- 指定單個物件對應關係 --> <association property="user" javaType="com.huida.pojo.User"> <id column="uid" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="birthday" property="birthday"/> <result column="address" property="address"/> </association> </resultMap> <!-- 一對多 --> <select id="findUserAndOrders" resultMap="UserAndOrdersResultMap"> SELECT a.*,b.id oid,user_id,number,createtime,note FROM USER a,orders b WHERE a.id=b.user_id </select> <resultMap type="com.huida.pojo.User" id="UserAndOrdersResultMap"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="birthday" property="birthday"/> <result column="sex" property="sex"/> <result column="address" property="address"/> <collection property="ordersList" ofType="com.huida.pojo.Orders"> <id column="oid" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> </collection> </resultMap> </mapper>
UserMapper.java
package com.huida.mapper; import java.util.List; import com.huida.pojo.OrderCustom; import com.huida.pojo.Orders; import com.huida.pojo.QueryVo; import com.huida.pojo.User; public interface UserMapper { User queryUserById(Integer id); List<User> findUserByQueryVo(QueryVo vo); int findUserCount(); List<User> findUserByUsernameAndSex(User user); List<User> findUserByIds(QueryVo vo); List<OrderCustom> findOrderAndUser1(); List<Orders> findOrderAndUser2(); List<User> findUserAndOrders(); }
5.編寫測試類
UserMapperTest.java
package com.huida.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
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.Before;
import org.junit.Test;
import com.huida.mapper.UserMapper;
import com.huida.pojo.OrderCustom;
import com.huida.pojo.Orders;
import com.huida.pojo.QueryVo;
import com.huida.pojo.User;
public class UserMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws IOException{
//建立sqlSessionFactoryBuilder物件
SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
//載入sqlMapConfig.xml
InputStream inputStream=Resources.getResourceAsStream("SqlMapConfig.xml");
//建立sqlSessionFactory
this.sqlSessionFactory=sqlSessionFactoryBuilder.build(inputStream);
}
@Test
public void run(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user=mapper.queryUserById(1);
System.out.println(user);
}
@Test
public void testfindUserByQueryVo(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
QueryVo vo=new QueryVo();
User user=new User();
user.setUsername("張");
vo.setUser(user);
List<User> list=mapper.findUserByQueryVo(vo);
for(User user2:list){
System.out.println(user2);
}
}
@Test
public void testfindUserCount(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
int count=mapper.findUserCount();
System.out.println(count);
openSession.close();
}
@Test
public void testfindUserByUsernameAndSex(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user=new User();
user.setUsername("%張%");
user.setSex("1");
List<User> list=mapper.findUserByUsernameAndSex(user);
for(User user3:list){
System.out.println(user3);
}
}
@Test
public void testfindUserByIds(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
QueryVo vo=new QueryVo();
List<Integer> ids=new ArrayList<Integer>();
ids.add(1);
ids.add(10);
ids.add(16);
vo.setIds(ids);
List<User> list=mapper.findUserByIds(vo);
for(User user:list){
System.out.println(user);
}
openSession.close();
}
@Test
public void testfindOrderAndUser1(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
List<OrderCustom> list=mapper.findOrderAndUser1();
for(OrderCustom orderCustom:list){
System.out.println(orderCustom);
}
}
@Test
public void testfindOrderAndUser2(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
List<Orders> list=mapper.findOrderAndUser2();
for(Orders orders:list){
System.out.println(orders);
}
}
@Test
public void testfindUserAndOrders(){
SqlSession openSession = sqlSessionFactory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
List<User> list=mapper.findUserAndOrders();
for(User user:list){
System.out.println(user);
}
}
}