mybatis spring配置SqlSessionTemplate的使用方式
mybatis spring配置SqlSessionTemplate使用
1.application.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:top="http://www.comtop.org/schema/spring-top"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.directwebremoting.org/schema/spring-dwr
http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-3.2.xsd
http://www.comtop.org/schema/spring-top
http://www.comtop.org/schema/top/spring-top.xsd">
<!-- spring 注解 -->
<context:component-scan base-package="com.dwr"/>
<!-- 這句的作用是表示允許DWR訪問(wèn)Spring的Context -->
<dwr:annotation-config id="dwr_as"/>
<!-- 掃描加了注解@RemoteProxy & @RemoteMethod 的對(duì)象 -->
<dwr:annotation-scan scanRemoteProxy="false" base-package="com.dwr" />
<!-- dwr初始化配置 -->
<dwr:configuration></dwr:configuration>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@10.10.15.29:1521:xxxx" />
<property name="username" value="edmp" />
<property name="password" value="edmp" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:com/mybatis/*.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<import resource="RESTful.xml" />
</beans>
2.MyBatisDAO :
package com.dwr;
import java.util.List;
import javax.annotation.Resource;
import org.apache.ibatis.session.RowBounds;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class MyBatisDAO{
@Resource
private SqlSessionTemplate sqlSessionTemplate;
public MyBatisDAO() {
}
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
public void delete(String statementId, Object deleteObject) {
try {
this.sqlSessionTemplate.delete(statementId, deleteObject);
} catch (Exception e) {
}
}
public void insert(String statementId, Object insertObject) {
try {
this.sqlSessionTemplate.insert(statementId, insertObject);
} catch (Exception e) {
}
}
public void update(String statementId, Object updateObject) {
try {
this.sqlSessionTemplate.update(statementId, updateObject);
} catch (Exception e) {
}
}
public Object getObject(String statementId, Object selectParamObject) {
return this.sqlSessionTemplate
.selectOne(statementId, selectParamObject);
}
@SuppressWarnings("all")
public List queryList(String statementId, Object queryParamObject) {
return this.sqlSessionTemplate
.selectList(statementId, queryParamObject);
}
@SuppressWarnings("all")
public List queryList(String statementId, Object queryParamObject,
int pageNo, int pageSize) {
RowBounds objRowBounds;
int iOffset = (pageNo - 1) * pageSize;
objRowBounds = new RowBounds(iOffset, pageSize);
return this.sqlSessionTemplate.selectList(statementId,
queryParamObject, objRowBounds);
}
}
3.mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="Test">
<select id="queryDataCount"
parameterType="com.mybatis.Test"
resultType="int">
SELECT COUNT(1) FROM INF_CONSUMER T WHERE T.UUID = #{uuid}
</select>
</mapper>
4.具體DAO配置
package com.dwr;
import org.springframework.stereotype.Repository;
import com.mybatis.Test;
@Repository
public class TestDAO extends MyBatisDAO {
public int getCount(Test test) {
return (Integer) this.getObject("Test.queryDataCount", test);
}
}
MyBatis+SpringBoot整合 注入SqlSessionTemplate
實(shí)際開(kāi)發(fā)中我們操作數(shù)據(jù)庫(kù)持久化,總是需要寫(xiě)重復(fù)的mapper,service,xml浪費(fèi)了我們大量的時(shí)間,在這里推薦大家使用SqlSessionTemplate廢話不多說(shuō)直接上代碼
工具類接口層:
package com.miaosuan.dao;
import java.util.List;
import com.miaosuan.dao.dbenums.NameSpaceEnum;
/**
* 數(shù)據(jù)庫(kù)操作接口
*
* @param <T> 傳入?yún)?shù)
* @param <E> 返回結(jié)果
* @author qin_wei
*/
public interface DBDao {
<T, E> E select(NameSpaceEnum namespace, String id, T params);
<T, E> List<E> selectList(NameSpaceEnum namespace, String id, T params);
<T> int update(NameSpaceEnum namespace, String id, T params);
<T> List<Long> updateList(NameSpaceEnum namespace, String id, List<T> list);
<T> long insert(NameSpaceEnum namespace, String id, T params);
<T> List<Long> insertList(NameSpaceEnum namespace, String id, List<T> list);
<T> int delete(NameSpaceEnum namespace, String id, T params);
<T> List<Long> deleteList(NameSpaceEnum namespace, String id, List<T> list);
<T> void batchALL(NameSpaceEnum namespace, String id, List<T> params, Integer bathcount);
}
實(shí)現(xiàn)類:
package com.miaosuan.dao;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.SqlCommandType;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import com.miaosuan.common.util.NullEmptyUtil;
import com.miaosuan.common.util.StringUtil;
import com.miaosuan.dao.dbenums.NameSpaceEnum;
import com.miaosuan.logger.Log;
@Repository("dbDao")
@Scope("prototype")
public class BaseDao implements DBDao {
@Autowired
SqlSessionTemplate sqlSessionTemplate;
@Override
public <T, E> E select(NameSpaceEnum namespace, String id, T params) {
if (params == null) {
return sqlSessionTemplate.selectOne(namespace.mapper + "." + id);
} else {
return sqlSessionTemplate.selectOne(namespace.mapper + "." + id, params);
}
}
//這個(gè)主要用來(lái)批量操作
@Override
public <T, E> List<E> selectList(NameSpaceEnum namespace, String id, T params) {
if (params == null) {
return sqlSessionTemplate.selectList(namespace.mapper + "." + id);
} else {
return sqlSessionTemplate.selectList(namespace.mapper + "." + id, params);
}
}
@Override
public <T> int update(NameSpaceEnum namespace, String id, T params) {
if (params == null) {
return sqlSessionTemplate.update(namespace.mapper + "." + id);
} else {
return sqlSessionTemplate.update(namespace.mapper + "." + id, params);
}
}
@SuppressWarnings("unchecked")
@Override
public <T> List<Long> updateList(NameSpaceEnum namespace, String id, List<T> list) {
try {
if (list == null || list.isEmpty()) {
return null;
}
MappedStatement ms = sqlSessionTemplate.getConfiguration().getMappedStatement(namespace.mapper + "." + id);
SqlCommandType sqlCommandType = ms.getSqlCommandType();
BoundSql boundSql = ms.getSqlSource().getBoundSql(list.get(0));
String sql = boundSql.getSql();
List<ParameterMapping> list2 = boundSql.getParameterMappings();
Connection connection = sqlSessionTemplate.getConnection();
PreparedStatement statement = null;
if (sqlCommandType == SqlCommandType.INSERT) {
statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
} else {
statement = connection.prepareStatement(sql);
}
for (T item : list) {
if (NullEmptyUtil.isEmpty(item)) {
continue;
}
if (item instanceof Map) {
Map<String, Object> map = (Map<String, Object>) item;
for (int index = 0; index < list2.size(); index++) {
ParameterMapping pm = list2.get(index);
Object value = map.get(pm.getProperty());
statement.setObject(index + 1, value);
}
} else if (item instanceof Long || item instanceof String || item instanceof Integer) {
statement.setObject(1, item);
} else {
for (int index = 0; index < list2.size(); index++) {
ParameterMapping pm = list2.get(index);
String methodName = StringUtil.hump("get_" + pm.getProperty(), "_");
Method method = item.getClass().getMethod(methodName);
Object value = method.invoke(item);
statement.setObject(index + 1, value);
}
}
statement.addBatch();
}
List<Long> resultList = new ArrayList<Long>();
int[] resultArray = statement.executeBatch();
if (sqlCommandType != SqlCommandType.INSERT) {
for (int intval : resultArray) {
resultList.add(Long.valueOf(intval + ""));
}
} else {
ResultSet resultSet = statement.getGeneratedKeys();
while (resultSet.next()) {
resultList.add(resultSet.getLong(0));
}
}
return resultList;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
@Override
public <T> long insert(NameSpaceEnum namespace, String id, T params) {
return update(namespace, id, params);
}
@Override
public <T> List<Long> insertList(NameSpaceEnum namespace, String id, List<T> list) {
return updateList(namespace, id, list);
}
@Override
public <T> int delete(NameSpaceEnum namespace, String id, T params) {
return update(namespace, id, params);
}
@Override
public <T> List<Long> deleteList(NameSpaceEnum namespace, String id, List<T> list) {
return updateList(namespace, id, list);
}
//所有的批量都可以用這個(gè)方法,它識(shí)別的是xml的sql,與方法無(wú)關(guān);bathcount指的是沒(méi)多少條提交一次事物
@Override
public <T> void batchALL(NameSpaceEnum namespace, String sqlId, List<T> list, Integer bathcount) {
List<T> data = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
data.add(list.get(i));
if (data.size() == bathcount || i == list.size() - 1) {
this.batchUtil(namespace, sqlId, data);
data.clear();
}
}
}
@SuppressWarnings("unchecked")
private <T> void batchUtil(NameSpaceEnum namespace, String sqlId, List<T> list) {
try {
if (list == null || list.isEmpty()) {
return;
}
MappedStatement ms = sqlSessionTemplate.getConfiguration().getMappedStatement(namespace.mapper + "." + sqlId);
SqlCommandType sqlCommandType = ms.getSqlCommandType();
BoundSql boundSql = ms.getSqlSource().getBoundSql(list.get(0));
String sql = boundSql.getSql();
List<ParameterMapping> list2 = boundSql.getParameterMappings();
Connection connection = sqlSessionTemplate.getSqlSessionFactory().openSession().getConnection();
PreparedStatement statement = null;
if (sqlCommandType == SqlCommandType.INSERT) {
statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
} else {
statement = connection.prepareStatement(sql);
}
sql = sql.replaceAll("\\n", "");
sql = sql.replaceAll("\\t", "");
sql = sql.replaceAll("[[ ]]{2,}", " ");
Log.info("==> Preparing:" + sql);
for (T item : list) {
if (NullEmptyUtil.isEmpty(item)) {
continue;
}
StringBuffer values = new StringBuffer();
if (item instanceof Map) {
Map<String, Object> map = (Map<String, Object>) item;
for (int index = 0; index < list2.size(); index++) {
ParameterMapping pm = list2.get(index);
Object value = map.get(pm.getProperty());
values.append(value).append("(").append(value.getClass()).append("),");
statement.setObject(index + 1, value);
}
} else if (item instanceof Long || item instanceof String || item instanceof Integer) {
statement.setObject(1, item);
values.append(item).append("(").append(StringUtils.substringAfterLast(item.getClass().toString(), ".")).append("),");
} else {
List<String> params = new ArrayList<>();
for (int index = 0; index < list2.size(); index++) {
ParameterMapping pm = list2.get(index);
String methodName = StringUtil.hump("get_" + pm.getProperty(), "_");
Method method = item.getClass().getMethod(methodName);
Object value = method.invoke(item);
params.add(value.toString());
statement.setObject(index + 1, value);
values.append(value).append("(").append(StringUtils.substringAfterLast(value.getClass().toString(), ".")).append("),");
}
}
statement.addBatch();
values.delete(values.length() - 1, values.length());
Log.info("==> Parameters:" + values);
}
List<Long> resultList = new ArrayList<>();
int[] resultArray = statement.executeBatch();
if (sqlCommandType != SqlCommandType.INSERT) {
for (int intval : resultArray) {
resultList.add(Long.valueOf(intval + ""));
}
} else {
ResultSet resultSet = statement.getGeneratedKeys();
while (resultSet.next()) {
try {
resultList.add(resultSet.getLong(1));
} catch (Exception e) {
Log.error("錯(cuò)誤:" + e.toString());
}
}
}
return;
} catch (Exception e) {
Log.error("錯(cuò)誤:" + e.toString());
throw new RuntimeException(e.toString());
}
}
@SuppressWarnings("unchecked")
protected <T> void printSql(String id, T params) {
try {
MappedStatement ms = sqlSessionTemplate.getConfiguration().getMappedStatement(id);
BoundSql boundSql = ms.getSqlSource().getBoundSql(params);
String sql = boundSql.getSql();
sql = sql.replaceAll("\\n", "");
sql = sql.replaceAll("\\t", "");
sql = sql.replaceAll("[[ ]]{2,}", " ");
List<ParameterMapping> list2 = boundSql.getParameterMappings();
if (params == null) {
} else if (params instanceof Map) {
Map<String, Object> map = (Map<String, Object>) params;
for (int index = 0; index < list2.size(); index++) {
ParameterMapping pm = list2.get(index);
Object value = map.get(pm.getProperty());
sql = sql.replaceFirst("[?]", value + "");
}
} else if (params instanceof Long || params instanceof String || params instanceof Integer) {
sql = sql.replaceFirst("[?]", params + "");
} else {
for (int index = 0; index < list2.size(); index++) {
ParameterMapping pm = list2.get(index);
String methodName = StringUtil.hump("get_" + pm.getProperty(), "_");
Method method = params.getClass().getMethod(methodName);
Object value = method.invoke(params);
sql = sql.replaceFirst("[?]", value + "");
}
}
Log.info(sql);
} catch (Exception e) {
e.printStackTrace();
}
}
}
說(shuō)明:NameSpaceEnum指的是你的xml的映射路徑,不喜歡的可以寫(xiě)成自己的xml所在路徑,我這邊用的是枚舉類
sqlid指的是你xml中方法的名字,
無(wú)論是單個(gè)操作還是批量操作,你的xml中的sql都是單個(gè),這里的批量用的并不是mybatis的foreach操作而是通過(guò)傳進(jìn)來(lái)的集合批量提交事務(wù)到數(shù)據(jù)庫(kù)‘'

具體使用:
接口定義:

接口實(shí)現(xiàn)類:

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.miaosuan.mapper.shop.shopimageinfo">//這里的路徑隨便寫(xiě)不要重復(fù)就可以
<sql id="tableName">
shop_image_info
</sql>
<sql id="where_sql">
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="spuId != null">
and spu_id = #{spuId}
</if>
</where>
</sql>
<sql id="update_sql">
<set>
<if test="imageName != null and imageName != ''">
image_name = #{imageName},
</if>
<if test="imageSuffix != null and imageSuffix != ''">
image_suffix = #{imageSuffix},
</if>
<if test="url != null and url != ''">
url = #{url},
</if>
<if test="zcyUrl != null and zcyUrl != ''">
zcy_url = #{zcyUrl},
</if>
<if test="zcyStatus != null">
zcy_status = #{zcyStatus},
</if>
<if test="imgType != null and imgType != ''">
img_type = #{imgType},
</if>
<if test="status != null">
status = #{status},
</if>
<if test="mainImg != null">
main_img = #{mainImg},
</if>
</set>
</sql>
<select id="list" resultType="DBMap" parameterType="DBMap">
select * from
<include refid="tableName"/>
<include refid="where_sql"/>
</select>
<select id="get" resultType="DBMap" parameterType="DBMap">
select * from
<include refid="tableName"/>
<include refid="where_sql"/>
limit 1
</select>
<update id="update" parameterType="DBMap">
update
<include refid="tableName"/>
<include refid="update_sql"/>
<include refid="where_sql"/>
</update>
<delete id="delete" parameterType="DBMap">
delete from
<include refid="tableName"/>
<include refid="where_sql"/>
</delete>
<insert id="insert" parameterType="DBMap" keyProperty="id" useGeneratedKeys="true">
insert into
<include refid="tableName"/>
(image_name,image_suffix,spu_id,url,zcy_url,zcy_status,img_type
<if test="status != null">
,status
</if>,main_img
)
values
(#{imageName},#{imageSuffix},#{spuId},#{url},#{zcyUrl},#{zcyStatus},#{imgType}
<if test="status != null">
,#{status}
</if>
,#{mainImg}
)
</insert>
<select id="selectBySpuId" resultType="DBMap" parameterType="java.lang.Long">
select * from
<include refid="tableName"></include>
<where>
and spu_id = #{spuId,jdbcType=BIGINT}
and img_type = 0 order by main_img desc ,id desc
</where>
</select>
<select id="selectIdsByShopId" resultType="java.lang.Long" parameterType="java.lang.Long">
select id from shop_image_info
<where>
spu_id = #{spuId} and img_type = 0
</where>
</select>
<update id="updateByPrimaryKeySelective" parameterType="DBMap">
update shop_image_info
<set>
<if test="imageName != null">
image_name = #{imageName},
</if>
<if test="imageSuffix != null">
image_suffix = #{imageSuffix},
</if>
<if test="spuId != null">
spu_id = #{spuId},
</if>
<if test="url != null">
url = #{url},
</if>
<if test="zcyUrl != null">
zcy_url = #{zcyUrl},
</if>
<if test="zcyStatus != null">
zcy_status = #{zcyStatus},
</if>
<if test="imgType != null">
img_type = #{imgType},
</if>
<if test="status != null">
status = #{status},
</if>
<if test="mainImg != null">
main_img = #{mainImg},
</if>
</set>
where id = #{id}
</update>
<insert id="insertSelective" parameterType="DBMap">
insert into shop_image_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="imageName != null">
image_name,
</if>
<if test="imageSuffix != null">
image_suffix,
</if>
<if test="spuId != null">
spu_id,
</if>
<if test="url != null">
url,
</if>
<if test="zcyUrl != null">
zcy_url,
</if>
<if test="zcyStatus != null">
zcy_status,
</if>
<if test="imgType != null">
img_type,
</if>
<if test="status != null">
status,
</if>
<if test="mainImg != null">
main_img,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id},
</if>
<if test="imageName != null">
#{imageName},
</if>
<if test="imageSuffix != null">
#{imageSuffix},
</if>
<if test="spuId != null">
#{spuId},
</if>
<if test="url != null">
#{url},
</if>
<if test="zcyUrl != null">
#{zcyUrl},
</if>
<if test="zcyStatus != null">
#{zcyStatus},
</if>
<if test="imgType != null">
#{imgType},
</if>
<if test="status != null">
#{status},
</if>
<if test="mainImg != null">
#{mainImg},
</if>
</trim>
</insert>
<delete id="batchDeleteByIds" parameterType="java.util.List">
delete from
<include refid="tableName"/>
where img_type = 0 and id in
<foreach collection="list" item="params" open="(" separator="," close=")">
#{params}
</foreach>
</delete>
<delete id="deleteById" parameterType="java.lang.Long">
delete from
<include refid="tableName"/>
where img_type = 0 and id = #{params}
</delete>
<delete id="deleteWithoutByIds" parameterType="DBMap">
delete from
<include refid="tableName"/>
where img_type = 0 and spu_id = #{spuId}
<if test="ids != null">
and id not in
<foreach collection="list" item="ids" open="(" separator="," close=")">
#{ids}
</foreach>
</if>
</delete>
<!--批量添加標(biāo)準(zhǔn)庫(kù)數(shù)據(jù)照片-->
<insert id="insertImage" parameterType="com.miaosuan.dao.entity.standard.StandardImageInfo">
insert into
<include refid="tableName"></include>
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="imageName != null">
image_name,
</if>
<if test="imageSuffix != null">
image_suffix,
</if>
<if test="spuId != null">
spu_id,
</if>
<if test="url != null">
url,
</if>
<if test="imgType != null">
img_type,
</if>
<if test="status != null">
status,
</if>
<if test="mainImg != null">
main_img,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="imageName != null">
#{imageName,jdbcType=VARCHAR},
</if>
<if test="imageSuffix != null">
#{imageSuffix,jdbcType=VARCHAR},
</if>
<if test="spuId != null">
#{spuId,jdbcType=INTEGER},
</if>
<if test="url != null">
#{url,jdbcType=VARCHAR},
</if>
<if test="imgType != null">
#{imgType,jdbcType=TINYINT},
</if>
<if test="status != null">
#{status,jdbcType=TINYINT},
</if>
<if test="mainImg != null">
#{mainImg,jdbcType=TINYINT},
</if>
</trim>
</insert>
無(wú)論批量還是單個(gè)都可以調(diào)用具體看你調(diào)用的dao里面的批量方法還是單個(gè)這個(gè)sql是如果數(shù)據(jù)庫(kù)沒(méi)有這條數(shù)據(jù)就添加,否則就修改,通過(guò)主鍵id判斷,如果不喜歡這中sql可以自己用常規(guī)的update方法
<insert id="insertOrUpdate" parameterType="DBMap" useGeneratedKeys="true"
keyProperty="id" keyColumn="id">
insert into
<include refid="tableName"></include>
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="imageName != null and imageName!=''">
image_name,
</if>
<if test="imageSuffix != null and imageSuffix!=''">
image_suffix,
</if>
<if test="spuId != null">
spu_id,
</if>
<if test="url != null and url!=''">
url,
</if>
<if test="imgType != null">
img_type,
</if>
<if test="status != null">
status,
</if>
<if test="mainImg != null">
main_img,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id},
</if>
<if test="imageName != null">
#{imageName,jdbcType=VARCHAR},
</if>
<if test="imageSuffix != null">
#{imageSuffix,jdbcType=VARCHAR},
</if>
<if test="spuId != null">
#{spuId,jdbcType=INTEGER},
</if>
<if test="url != null">
#{url,jdbcType=VARCHAR},
</if>
<if test="imgType != null">
#{imgType,jdbcType=TINYINT},
</if>
<if test="status != null">
#{status,jdbcType=TINYINT},
</if>
<if test="mainImg != null">
#{mainImg,jdbcType=TINYINT},
</if>
</trim>
ON DUPLICATE KEY UPDATE
<trim suffixOverrides=",">
<if test="imageName != null and imageName!=''">
image_name = #{imageName,jdbcType=VARCHAR},
</if>
<if test="imageSuffix != null and imageSuffix!=''">
image_suffix = #{imageSuffix,jdbcType=VARCHAR},
</if>
<if test="spuId != null">
spu_id = #{spuId,jdbcType=INTEGER},
</if>
<if test="url != null and url!=''">
url=#{url,jdbcType=VARCHAR},
</if>
<if test="imgType != null">
img_type=#{imgType,jdbcType=TINYINT},
</if>
<if test="status != null">
status=#{status,jdbcType=TINYINT},
</if>
<if test="mainImg != null">
main_img=#{mainImg,jdbcType=TINYINT},
</if>
</trim>
</insert>
</mapper>
所有的接口層只需要定義xml,通過(guò)dao調(diào)用就可以直接獲取數(shù)據(jù)庫(kù)數(shù)據(jù)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- springboot3集成mybatis-plus報(bào)sqlSession異常的問(wèn)題解決
- SpringBoot3整合MyBatis出現(xiàn)異常:Property?'sqlSessionFactory'or?'sqlSessionTemplate'?are?required
- Spring3 整合MyBatis3 配置多數(shù)據(jù)源動(dòng)態(tài)選擇SqlSessionFactory詳細(xì)教程
- 深入淺出重構(gòu)Mybatis與Spring集成的SqlSessionFactoryBean(上)
- MyBatis與Spring中的SqlSession詳解
相關(guān)文章
idea中springboot項(xiàng)目創(chuàng)建后追加依賴
在項(xiàng)目創(chuàng)建的時(shí)候選擇好依賴創(chuàng)建項(xiàng)目,之后追加依賴不是很方便,本文就來(lái)介紹一下idea中springboot項(xiàng)目創(chuàng)建后追加依賴,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
java中基本數(shù)據(jù)類型與Object的關(guān)系說(shuō)明
這篇文章主要介紹了java基本數(shù)據(jù)類型與Object的關(guān)系說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
shiro多驗(yàn)證登錄代碼實(shí)例及問(wèn)題解決
這篇文章主要介紹了shiro多驗(yàn)證登錄代碼實(shí)例及問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Java中String和StringBuffer及StringBuilder?有什么區(qū)別
這篇文章主要介紹了Java中String和StringBuffer及StringBuilder?有什么區(qū)別,String?是?Java?語(yǔ)言非常基礎(chǔ)和重要的類,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容2022-06-06
JavaWeb核心技術(shù)中Session與Cookie淺析
session的工作原理和cookie非常類似,在cookie中存放一個(gè)sessionID,真實(shí)的數(shù)據(jù)存放在服務(wù)器端,客戶端每次發(fā)送請(qǐng)求的時(shí)候帶上sessionID,服務(wù)端根據(jù)sessionID進(jìn)行數(shù)據(jù)的響應(yīng)2023-02-02
深入理解springboot中配置文件application.properties
本文主要介紹了springboot中配置文件application.properties,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
SpringBoot?容器刷新前回調(diào)ApplicationContextInitializer
這篇文章主要為大家介紹了SpringBoot?容器刷新前回調(diào)ApplicationContextInitializer使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

