package com.zxh.customer.bean;
public class Parter {
private Long partyId;
private String partyName;
public Long getPartyId() {
return partyId;
}
public void setPartyId(Long partyId) {
this.partyId = partyId;
}
public String getPartyName() {
return partyName;
}
public void setPartyName(String partyName) {
this.partyName = partyName;
}
}
package com.zxh.customer.bean;
import
Java.io.Serializable;
import java.util.List;
import com.zxh.customer.bean.Parter;
public class User{
private Long custId;
private String custName;
private Parter parter;
private List<Parter> parterList;
public Long getCustId() {
return custId;
}
public void setCustId(Long custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public Parter getParter() {
return parter;
}
public void setParter(Parter parter) {
this.parter = parter;
}
public List<Parter> getParterList() {
return parterList;
}
public void setParterList(List<Parter> parterList) {
this.parterList = parterList;
}
}
<?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.zxh.parter">
<resultMap type="Parter" id="resultParter">
<id column="PARTY_ID" property="partyId" />
<result column="PARTY_NAME" property="partyName" />
</resultMap>
<resultMap type="User" id="resultUser">
<id column="CUST_ID" property="custId" />
<result column="CUST_NAME" property="custName" />
</resultMap>
<select id="selectUser" parameterType="User" resultMap="resultUser">
SELECT CUST_ID, CUST_NAME FROM CUST WHERE
CUST_NAME like #{custName}
</select>
</mapper>
<?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.zxh.customer1111">
<!-- 以下兩個<cache>標籤二選一,第一個可以輸出日誌,第二個不輸出日誌 配置二級緩存 一級緩存爲session緩存, 二級緩存可以自定義存儲源 這裏使用ehcache-->
<!-- <cache type="org.mybatis.caches.ehcache.LoggingEhcache" /> -->
<!-- <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> -->
<cache eviction="FIFO" flushInterval="60000" size="1024"
readOnly="true" />
<!-- 無關聯操作 column指的是sql語句中的列別名, -->
<resultMap type="User" id="resultUser1111">
<id column="CUST_ID" property="custId" />
<result column="CUST_NAME" property="custName" />
</resultMap>
<!-- 1、當parameterType="int" #{id} 其中id可能任取名稱 2、當resultType="User" 返回列名要和類的屬性名相同,否則返回null,
resultMap="resultUser" 需要定義resultMap 映射屬性和表列 parameterType,resultType 可以爲int,string,long,java.util.HashMap等等 -->
<select id="selectUserById" parameterType="int" resultType="User">
SELECT CUST_ID as "custId", CUST_NAME "custName" FROM CUST WHERE
CUST_ID = #{id, jdbcType=VARCHAR}
</select>
<select id="selectUserById1" parameterType="int" resultMap="resultUser">
SELECT CUST_ID, CUST_NAME FROM CUST WHERE
CUST_ID = #{id}
</select>
<select id="selectUser111" parameterType="User" resultMap="resultUser1111">
SELECT CUST_ID, CUST_NAME FROM CUST WHERE
CUST_NAME like #{custName}
</select>
<select id="selectUserById2" parameterType="User" resultMap="resultUser">
SELECT CUST_ID, CUST_NAME FROM CUST WHERE
CUST_ID = #{custId}
<!-- 動態sql -->
<if test="title != null"> and title = #{title} </if>
<choose>
<when test="title != null"> and title = #{title}
</when>
<when test="content != null"> and content = #{content} </when>
<otherwise> and owner = "owner1" </otherwise>
</choose>
<!-- (對包含的內容加上 prefix,或者 suffix 等,前綴,後綴) 程序 -->
<trim prefix="where" prefixOverrides="and|or">
<if test="title != null"> title = #{title} </if>
<if test="content != null"> and content = #{content} </if>
<if test="owner != null"> or owner = #{owner} </if>
</trim>
<!-- where元素的作用是會在寫入where元素的地方輸出一個where,另外一個好處是你不需要考慮where元素裏面的條件輸出是什麼樣子的,MyBatis會智能的幫你處理,如果所有的條件都不滿足那麼MyBatis就會查出所有的記錄,如果輸出後是and
開頭的,MyBatis會把第一個and忽略,當然如果是or開頭的,MyBatis也會把它忽略;此外,在where元素中你不需要考慮空格的問題,MyBatis會智能的幫你加上。 -->
<where>
<if test="title != null"> title = #{title} </if>
<if test="content != null"> and content = #{content} </if>
<if test="owner != null"> and owner = #{owner} </if>
</where>
<!-- (主要用於更新時) -->
<set>
<if test="title != null"> title = #{title}, </if>
<if test="content != null"> content = #{content}, </if>
<if test="owner != null"> owner = #{owner} </if>
</set>
<!-- 用在in後面 -->
<foreach collection="list" index="index" item="item" open="("
separator="," close=")"> #{item}
</foreach>
</select>
<!-- 多對一 或者 一對一 -->
<resultMap type="User" id="resultUser1">
<id column="CUST_ID" property="custId" />
<result column="CUST_NAME" property="custName" />
<association property="parter" resultMap="com.zxh.parter.resultParter"
select="另一個select的id" /><!--注意此處引用的方式 -->
<association property="parter" column="party_id" javaType="Parter">
<id property="partyId" column="party_id" />
<result property="partyName" column="party_name" />
</association>
</resultMap>
<select id="selectUserById3" parameterType="int" resultMap="resultUser1">
SELECT C.CUST_ID, C.CUST_NAME, P.PARTY_ID, P.PARTY_NAME FROM CUST C,
PARTY P WHERE C.PARTY_ID = P.PARTY_ID AND
C.CUST_ID = #{id}
</select>
<!-- 一對多 或者 多對多 -->
<resultMap type="User" id="resultUser2">
<id column="CUST_ID" property="custId" />
<result column="CUST_NAME" property="custName" />
<collection property="parterList" ofType="Parter"
resultMap="com.zxh.parter.resultParter" /><!--注意此處引用的方式 -->
<!-- 可以不設置resultMap, 那麼需要resultParter的內容直接引進來 -->
<!-- <id column="PARTY_ID" property="partyId" /> <result column="PARTY_NAME"
property="partyName" /> -->
</resultMap>
<select id="selectUserById4" parameterType="int" resultMap="resultUser2">
SELECT C.CUST_ID, C.CUST_NAME, P.PARTY_ID, P.PARTY_NAME FROM CUST C,
PARTY P WHERE C.PARTY_ID = P.PARTY_ID AND
C.CUST_ID = #{id}
</select>
<!-- 增加 -->
<!-- useGeneratedKeys 獲取由數據庫自動生成的主鍵 keyProperty 獲取的主鍵注入到此屬性中 支持主鍵自動增長的數據庫 -->
<insert id="saveUser" parameterType="User">
insert into cust(cust_id,
cust_name) values(seq_cust.nextval, #{custName})
</insert>
<!-- 更新 -->
<update id="updateUser" parameterType="User">
update cust set cust_name
= #{custName} where cust_id = #{custId}
</update>
<!-- 刪除 -->
<delete id="deleteUser" parameterType="int">
delete from cust where
cust_id = #{custId}
</delete>
<delete id="deleteUser1" parameterType="User">
delete from cust where
cust_id = #{custId}
</delete>
</mapper>
package com.zxh.customer.dao;
import java.util.List;
import com.zxh.customer.bean.Parter;
import com.zxh.customer.bean.User;
public interface IUserDao {
//基本查詢
public User queryUserById(Long custId);
public User queryUserById1(Long custId);
public User queryUserById2(User user);
public User queryUserById3(Long custId);
public User queryUserById4(Long custId);
public void saveUser(User user);
public void updateUser(User user);
public void deleteUser(Long custId);
public void deleteUser1(User user);
}
package com.zxh.customer.dao;
import java.util.List;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import com.zxh.customer.bean.User;
import com.zxh.customer.testbasegeneric.util.MybatisUtil;
public class UserDaoImpl implements IUserDao {
// 根據ID查詢具體某條記錄
public User queryUserById(Long custId) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
User user;
try {
user = session.selectOne("com.zxh.customer.selectUserById", custId);
} finally {
session.close();
}
return user;
}
public User queryUserById1(Long custId) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
User user;
try {
user = session
.selectOne("com.zxh.customer.selectUserById1", custId);
} finally {
session.close();
}
return user;
}
public User queryUserById2(User user) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
User user1;
try {
user1 = session.selectOne("com.zxh.customer.selectUserById2", user);
} finally {
session.close();
}
return user1;
}
public User queryUserById3(Long custId) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
User user;
try {
user = session
.selectOne("com.zxh.customer.selectUserById3", custId);
} finally {
session.close();
}
return user;
}
public User queryUserById4(Long custId) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
User user;
try {
user = session
.selectOne("com.zxh.customer.selectUserById4", custId);
} finally {
session.close();
}
return user;
}
// 新增
public void saveUser(User user) {
// 默認不自動提交事務 openSession每次都是獲取新的連接Connection
// 在DAO層只是持久化數據,不應該包含邏輯,在service層把多個操作放在一個事務中(同一個session同一個Connection)
// 那麼session應該由 service傳入,在serice控制事務的提交與回滾, 不提倡這麼做, 還是集成spirng吧
SqlSession session = MybatisUtil.getSessionFactory().openSession();
try {
session.insert("com.zxh.customer.saveUser", user);
// 提交事務
session.commit();
} finally {
session.close();
}
}
// 批量新增
public void saveUserList(List<User> userList) {
SqlSession session = MybatisUtil.getSessionFactory().openSession(
ExecutorType.BATCH, false);
try {
for (int i = 0; i < userList.size(); i++) {
session.insert("com.zxh.customer.saveUser", userList.get(i));
}
// 提交事務
session.commit();
// 清理緩存,防止溢出
session.clearCache();
} finally {
session.close();
}
}
// 更新
public void updateUser(User user) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
try {
session.update("com.zxh.customer.updateUser", user);
session.commit();
} finally {
session.close();
}
}
// 刪除
public void deleteUser(Long custId) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
try {
session.delete("com.zxh.customer.deleteUser", custId);
session.commit();
} finally {
session.close();
}
}
// 刪除
public void deleteUser1(User user) {
SqlSession session = MybatisUtil.getSessionFactory().openSession();
try {
session.delete("com.zxh.customer.deleteUser1", user);
session.commit();
} finally {
session.close();
}
}
}
package com.zxh.customer.util;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config/Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSessionFactory() {
return sqlSessionFactory;
}
}
Configuration.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>
<!-- 屬性配置 xml文件中使用 ${} url "/"路徑-文件 或 "."-java類文件 -->
<properties resource="config/jdbc_config.properties">
<!-- <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@172.16.1.241:1521:jtcrm" />
<property name="username" value="jtorder" />
<property name="password" value="jtorder" /> -->
</properties>
<!-- 或者 首先讀取properties元素內部的子元素的值, 再讀取properties配置文件的值 後者覆蓋前者 -->
<!-- <properties resource="config/jdbc.properties"> <property name="driver"
value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@172.16.1.241:1521:jtcrm"
/> </properties> -->
<!-- 設置mybatis3 運行時的行爲方式 -->
<settings>
<!-- 設置超時時間,它決定驅動等待一個數據庫響應的時間 -->
<setting name="defaultStatementTimeout" value="60000" />
<!-- 啓用或禁用 緩存 -->
<setting name="cacheEnabled" value="false" />
<!-- 啓用或禁用延遲加載。當禁用時, 所有關聯對象都會即時加載 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 允許或不允許多種結果集從一個單獨 的語句中返回(需要適合的驅動) 不用考慮 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 使用列標籤代替列名。 不同的驅動在這 方便表現不同 不用考慮 -->
<setting name="useColumnLabel" value="true" />
<!-- 允許 JDBC 支持生成的鍵。 需要適合的 驅動。 如果設置爲 true 則這個設置強制 生成的鍵被使用 -->
<setting name="useGeneratedKeys" value="false" />
<!-- 等等 -->
</settings>
<!-- 定義類別名,簡化xml文件的配置 -->
<typeAliases>
<typeAlias type="com.zxh.customer.bean.User" alias="User" />
<typeAlias type="com.zxh.customer.bean.Parter" alias="Parter" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@172.16.1.241:1521:jtcrm" />
<property name="username" value="jtorder" />
<property name="password" value="jtorder" /> -->
</dataSource>
</environment>
</environments>
<!-- SQL映射文件 -->
<mappers>
<mapper resource="com/zxh/customer/bean/User.xml" />
<mapper resource="com/zxh/customer/bean/Parter.xml" />
</mappers>
</configuration>
jdbc_config.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc\:oracle\:thin\:@172.16.1.241\:1521\:jtcrm
username=jtorder
password=jtorder
package com.zxh.customer.test;
import java.util.List;
import com.zxh.customer.bean.User;
import com.zxh.customer.daogeneric.IUserDao;
import com.zxh.customer.daogeneric.UserDaoImpl;
public class Test {
public static void main(String[] args) {
// 基本查詢
IUserDao userDao = new UserDaoImpl();
User user = new User();
user.setCustName("%中國%");
// List<User> resultUser = userDao.selectList("com.zxh.parter.selectUser", user);
// System.out.println(resultUser.size());
System.out.println("成功!");
}