Mybatis实现数据的增删改查(CRUD)(精)

合集下载

如何在IDEA中使用mybatis创建项目并进行增删改查操作

如何在IDEA中使用mybatis创建项目并进行增删改查操作

如何在IDEA中使⽤mybatis创建项⽬并进⾏增删改查操作1、新建⼀个项⽬;2、导⼊相关的依赖包;3、配置mybatis主配置⽂件,连接信息和mapper位置等;①mybatis主配置⽂件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!--引⼊jdbc.properties配置⽂件--><properties resource="jdbc.properties"></properties><!--mybatis设置项--><settings><!--开启⽇志,将⽇志信息打印到控制台--><setting name="logImpl" value="STDOUT_LOGGING" /><!--开启缓存,默认开启--><setting name="cacheEnabled" value="true"/><!--设置延迟加载--><setting name="lazyLoadingEnabled" value="true"/><!----><setting name="aggressiveLazyLoading" value="false"/></settings><!-- 配置实体类别名 --><typeAliases><!-- 配置实体类所在包 --><package name="com.seecen.mybatis3.pojo"/></typeAliases><!----><!--数据库连接池信息--><environments default="oracledb"><environment id="oracledb"><!--配置事务管理⽅式,指定为使⽤jdbc的事务--><transactionManager type="jdbc"></transactionManager><!--指定数据源,type pooled指定为连接池--><dataSource type="pooled"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${ername}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 配置mapper.xml⽂件位置 --><mappers><!--指定mapper⽂件所在包--><package name="com.seecen.mybatis3.mapper"/></mappers></configuration>②连接信息jdbc:properties;jdbc.driver=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@localhost:1521:xeername=sc2001jdbc.password=sun#\u9A71\u52A8jar\u5305\u7684\u4F4D\u7F6E,\u5177\u4F53\u7684\u8DEF\u5F84\u3002\u9006\u5411\u751F\u6210\u4EE3\u7801\u65F6\u4F7F\u7528 driverClassPath=C:\\Users\\Administrator\\.m2\\repository\\com\\oracle\\ojdbc6\\11.2.0.3.0\\ojdbc6-11.2.0.3.0.jar③配置配置⽂件generatorConfig.xml;<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE generatorConfiguration PUBLIC "-////DTD MyBatis Generator Configuration 1.0//EN""/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration><!--加载jdbc.properties配置⽂件--><properties resource="jdbc.properties" /><!--配置驱动jar包的位置--><classPathEntry location="${driverClassPath}" /><!--context:⽣成⼀组对象的环境id:必选,上下⽂id,⽤于在⽣成错误时提⽰defaultModelType:指定⽣成对象的样式1,conditional:类似hierarchical;2,flat:所有内容(主键,blob)等全部⽣成在⼀个对象中;3,hierarchical:主键⽣成⼀个XXKey对象(key class),Blob等单独⽣成⼀个对象,其他简单属性在⼀个对象中(record class)targetRuntime:1,MyBatis3:默认的值,⽣成基于MyBatis3.x以上版本的内容,包括XXXBySample;2,MyBatis3Simple:类似MyBatis3,只是不⽣成XXXBySample;introspectedColumnImpl:类全限定名,⽤于扩展MBG--><context id="context1" targetRuntime="MyBatis3"><!-- genenat entity时,⽣成toString --><plugin type="org.mybatis.generator.plugins.ToStringPlugin"/><!-- generate entity时,⽣成serialVersionUID --><plugin type="org.mybatis.generator.plugins.SerializablePlugin"/><!--不⽣成注释--><commentGenerator><property name="suppressAllComments" value="true" /></commentGenerator><!--配置数据库连接信息--><jdbcConnection driverClass="${jdbc.driver}"connectionURL="${jdbc.url}" userId="${ername}" password="${jdbc.password}" /><!-- java模型创建器,是必须要的元素负责:1,key类(见context的defaultModelType);2,java类;3,查询类targetPackage:⽣成的类要放的包,真实的包受enableSubPackages属性控制;targetProject:⽬标项⽬,指定⼀个存在的⽬录下,⽣成的内容会放到指定⽬录中,如果⽬录不存在,MBG不会⾃动建⽬录--><javaModelGenerator targetPackage="com.seecen.mybatis.pojo"targetProject="src/main/java"><!-- 设置是否在getter⽅法中,对String类型字段调⽤trim()⽅法 --><property name="trimStrings" value="true" /></javaModelGenerator><!-- ⽣成SQL map的XML⽂件⽣成器,注意,在Mybatis3之后,我们可以使⽤mapper.xml⽂件+Mapper接⼝(或者不⽤mapper接⼝),或者只使⽤Mapper接⼝+Annotation,所以,如果 javaClientGenerator配置中配置了需要⽣成XML的话,这个元素就必须配置 targetPackage/targetProject:同javaModelGenerator--><sqlMapGenerator targetPackage="com.seecen.mybatis.mapper"targetProject="src/main/java"></sqlMapGenerator><!-- 对于mybatis来说,即⽣成Mapper接⼝,注意,如果没有配置该元素,那么默认不会⽣成Mapper接⼝targetPackage/targetProject:同javaModelGeneratortype:选择怎么⽣成mapper接⼝(在MyBatis3/MyBatis3Simple下):1,ANNOTATEDMAPPER:会⽣成使⽤Mapper接⼝+Annotation的⽅式创建(SQL⽣成在annotation中),不会⽣成对应的XML;2,MIXEDMAPPER:使⽤混合配置,会⽣成Mapper接⼝,并适当添加合适的Annotation,但是XML会⽣成在XML中;3,XMLMAPPER:会⽣成Mapper接⼝,接⼝完全依赖XML;注意,如果context是MyBatis3Simple:只⽀持ANNOTATEDMAPPER和XMLMAPPER--><javaClientGenerator targetPackage="com.seecen.mybatis.mapper"targetProject="src/main/java" type="XMLMAPPER" /><table tableName="t_course" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"enableSelectByExample="false" selectByExampleQueryId="false"></table></context></generatorConfiguration>这三个⽂件放⼊资源⽬录下⾯;我的⽬录是这样的,仅供参考:4、在pojo中创建⼀个Product.java的实体类⽂件;package com.seecen.mybatis3.pojo;import java.io.Serializable;public class Product implements Serializable {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}@Overridepublic String toString() {return"Product{" +"id=" + id +", name='" + name + '\'' +'}';}}4、编写Mapper对应的mapper.xml⽂件和接⼝,定义接⼝⽅法对应的sql语句;ProductMapper⽂件和ProductMapper.xml⽂件:package com.seecen.mybatis3.mapper;import com.seecen.mybatis3.pojo.Product;import java.util.List;public interface ProductMapper {int insert(Product product);int deleteById(Integer id);int update(Product product);Product selectById(Integer id);List<Product> selectAll();}<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.seecen.mybatis3.mapper.ProductMapper"><insert id="insert" parameterType="Product"><selectKey keyProperty="id" order="BEFORE" resultType="integer">select p_pro.nextval from dual</selectKey>insert into Product(id,name) values(#{id},#{name})</insert><update id="update" parameterType="Product">update Product set name = #{name} where id=#{id}</update><delete id="deleteById">delete from Product where id=#{id}</delete><select id="selectById" parameterType="integer" resultType="Product">select * from Product where id=#{id}</select><select id="selectAll" resultType="Product">select * from Product</select></mapper>5、编写dao层访问接⼝Mapper,⽤来定义数据库操作⽅法;import com.seecen.mybatis3.mapper.ProductMapper;import com.seecen.mybatis3.pojo.Product;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 java.io.IOException;import java.io.InputStream;import java.util.List;public class ProductTest {@Testpublic void Test() throws IOException {InputStream is= Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession=sqlSessionFactory.openSession();ProductMapper mapper=sqlSession.getMapper(ProductMapper.class);//插⼊⼀条数据Product product=new Product();product.setName("三只松⿏");int count=mapper.insert(product);System.out.println("插⼊记录数:"+count);System.out.println(product);//删除⼀条记录int count1=mapper.deleteById(1);System.out.println(count1);//查询⼀条记录Product product1=mapper.selectById(2);System.out.println(product1);//修改⼀条记录product1.setName("⼀包薯⽚");int i=mapper.update(product1);System.out.println("修改记录数:"+i);//查询所有的信息List<Product> products=mapper.selectAll();for (Product product2:products){System.out.println(product2);}mit();sqlSession.close();is.close();}}最后,⼀定要多注意⼀些语法的规范或者要试着去查看错误信息,以便更好的修改错误。

Mybatis中的update动态SQL语句

Mybatis中的update动态SQL语句

Mybatis中的update动态SQL语句Mybatis中的CRUD操作(增删改查)中,简单的SQL操作⽐较直观,如查找操作:<select id="findBySrcId" resultMap="entityRelationResultMap">SELECT * FROM ENTITY_RELATION WHERE SRC_ID=#{srcId}</select>其中id对应同名java⽂件中的⽅法,resultMap对应的⾃定义的数据类型(当使⽤java⾃带类型就更容易了,⽐如ng.String之类的)。

但是涉及到更新操作时,可能不需要对所有字段更新,这时不需要更新的字段需要保持原字段信息,当使⽤以下信息就会报错:<update id="updateOne" parameterType="com.inspur.search.data.EntityRelation">update ENTITY_RELATION SET SRC_ID=#{srcId},SRC_TYPE=#{srcType},DEST_ID=#{destId},DEST_TYPE=#{destType},REL_TYPE=#{relType},STATUS=#{status},SN_ID=#{snId}where id=#{id}</update>因为不更新的字段,会被传递null到SQL中,引起异常。

这时就需要进⾏动态SQL拼接,如下,使⽤trim就是为了删掉最后字段的“,”。

主要不⽤单独写SET了,因为set被包含在trim中了:<update id="updateOne" parameterType="com.inspur.search.data.EntityRelation">UPDATE ENTITY_RELATION<trim prefix="set" suffixOverrides=","><if test="srcId!=null">SRC_ID=#{srcId},</if><if test="srcType!=null">SRC_TYPE=#{srcType},</if><if test="destId!=null">DEST_ID=#{destId},</if><if test="destType!=null">DEST_TYPE=#{destType},</if><if test="relType!=null">REL_TYPE=#{relType},</if><if test="status!=null">STATUS=#{status},</if><if test="snId!=null">SN_ID=#{snId},</if></trim>WHERE id=#{id}</update>。

总结一下mybatis对多对多查询与增删改查的心得

总结一下mybatis对多对多查询与增删改查的心得

总结一下mybatis对多对多查询与增删改查的心得引言在实际的开发中,多对多关联关系是经常遇到的问题,而m yba t is作为一款高效的持久层框架,为我们提供了便捷的解决方案。

本文将总结一下通过m yb at is对多对多关系进行查询和增删改查的心得。

查询多对多关系在m yb at is中,查询多对多关系可以通过嵌套查询和关联表查询来实现。

嵌套查询嵌套查询是通过在映射文件中定义多个查询语句,并通过r esu l tM ap来关联结果,从而实现多对多关系的查询。

具体步骤如下:1.在映射文件中定义多个s el ec t语句,分别查询两个关联表的数据。

2.使用\<re su lt Map>标签定义一个结果映射,包括两个关联表的字段。

3.在主查询语句中使用\<co ll ec ti on>标签来引用结果映射和关联查询语句。

4.使用联合结果映射来获取最终查询结果。

关联表查询关联表查询是通过多表联查来实现多对多关系的查询。

具体步骤如下:1.在映射文件中编写多表联查的SQ L语句,使用J OI N语句关联两个关联表。

2.在\<s el ec t>标签中使用\<re su lt Ma p>定义结果映射,包括两个关联表的字段。

3.在J av a代码中编写相应的Ma pp er接口和Ma pp er.x ml文件。

4.调用Ma pp er接口中的方法来执行查询操作。

增删改查多对多关系m y ba ti s对多对多关系的增删改查操作也是通过多表关联来实现的。

增加记录要增加多对多关系的记录,需要进行以下操作:1.在映射文件中定义插入操作的SQ L语句,插入关联表的数据。

2.在J av a代码中编写相应的Ma pp er接口和Ma pp er.x ml文件。

3.调用Ma pp er接口中的方法来执行插入操作。

删除记录要删除多对多关系的记录,需要进行以下操作:1.在映射文件中定义删除操作的SQ L语句,删除关联表的数据。

SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑

SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑

SpringBoot+MyBatis中⾃动根据@Table注解和@Column注解⽣成增删改查逻辑习惯使⽤jpa操作对象的⽅式,现在⽤mybatis有点不习惯。

其实是懒得写SQL,增删改查那么简单的事情你帮我做了呗,mybatis:NO。

没办法,⾃⼰搞喽!这⾥主要是实现了通过代码⾃动⽣成mybatis的增删改查语句,并注册到SqlSessionFactory中,并没有⽣成xml⽂件,不⽣成mapper⽂件。

只是在项⽬启动的时候⾃动⽣成,配置到SqlSessionFactory中,下⼀次启动后⾃动根据model⾃动⽣成相关逻辑。

所以不必担⼼表结构修改需要改⼀⼤堆⽂件。

使⽤了此⽅法只需要改model⽂件就可以了。

注意:model必须添加@Table注解,对应的列也必须添加@Column注解(javax)。

思路:在项⽬启动时mybatis默认配置运⾏结束后添加⾃定义配置@Configuration@AutoConfigureAfter(MybatisAutoConfiguration.class)public class MyBatisTypeMapScannerConfig {private Logger log = Logger.getLogger(MyBatisTypeMapScannerConfig.class);public MyBatisTypeMapScannerConfig(ApplicationContext applicationContext, SqlSessionFactory sqlSessionFactory) {在配置中可以获取SqlSessionFactory,看到这⾥,已经结束了。

剩下的都是不重要细节。

1.读取项⽬下的model(包含@table注解的类)List<Class<?>> list = ClassUtil.getClassesWithAnnotation(Table.class);2.读取model下的字段(根据@Column注解)Map<String, Map<String, Object>> cols = ClassUtil.getColumnRelation(clas);3.根据table和column信息配置resultmap,mapperEnd;代码: MyBatisTypeMapScannerConfigimport java.io.ByteArrayInputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;import javax.persistence.Table;import mons.logging.Log;import mons.logging.LogFactory;import org.apache.ibatis.builder.xml.XMLMapperBuilder;import org.apache.ibatis.mapping.ResultMap;import org.apache.ibatis.mapping.ResultMapping;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.tomcat.util.buf.StringUtils;import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Configuration;import com.esri.rest.util.ClassUtil;/*** ⾃动根据@Table注解和@Column注解添加mybatis中的resultmap配置,* 此配置⽣效后不需要在mapper.xml中⼿动添加resultmap,⾃动添加的resultmap的ID为类的全路径名* <p>* Title: MyBatisTypeMapScannerConfig.java* </p>* <p>* Description:* </p>** @author lichao1* @date 2018年12⽉4⽇* @version 1.0*/@Configuration@AutoConfigureAfter(MybatisAutoConfiguration.class)public class MyBatisTypeMapScannerConfig {protected final Log log = LogFactory.getLog(getClass());public MyBatisTypeMapScannerConfig(ApplicationContext applicationContext, SqlSessionFactory sqlSessionFactory) {log.debug("⾃动添加resultMap");org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();// ResultMap rm = new ResultMap.Builder(configuration, id, type,// null).build();// configuration.addResultMap(rm);// 获取默认包下的所有包含@Table注解的类List<Class<?>> list = ClassUtil.getClassesWithAnnotation(Table.class);for (Class<?> clas : list) {System.out.println(clas);Map<String, Map<String, Object>> cols = ClassUtil.getColumnRelation(clas);ResultMap rm = new ResultMap.Builder(configuration, clas.getName(), clas,getResultMapping(configuration, cols)).build();configuration.addResultMap(rm);List<ResultMap> resultMaps = new ArrayList<ResultMap>();resultMaps.add(rm);Table table = clas.getAnnotation(Table.class);String tableName = ();String allColum = getColumListString(cols);// select// String sql = " select " + allColum + " from " + tableName;// SqlSource sqlSource = new RawSqlSource(configuration, sql, clas);// Builder builder = new MappedStatement.Builder(configuration,// clas.getName() + ".select", sqlSource,// SqlCommandType.SELECT);// builder.resultMaps(resultMaps);// MappedStatement ms = builder.build();// configuration.addMappedStatement(ms);InputStream inputStream = createXml(clas, cols);XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, clas.getName() + ".auto",configuration.getSqlFragments());mapperParser.parse();}log.debug("⾃动添加resultMap");}private InputStream createXml(Class<?> clas, Map<String, Map<String, Object>> cols) {StringBuilder builder = new StringBuilder();String name = clas.getName();Table table = clas.getAnnotation(Table.class);String tableName = ();String allColum = getColumListString(cols);builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");builder.append("<!DOCTYPE mapper PUBLIC \"-////DTD Mapper 3.0//EN\" \"/dtd/mybatis-3-mapper.dtd\" >"); builder.append("<mapper namespace=\"" + name + "\" >");Set<String> keys = cols.keySet();String[] keyArr = new String[keys.size()];keys.toArray(keyArr);/****************** 查询 start ***************/builder.append("<select id=\"" + name + ".select\" resultMap=\"" + name + "\" >");builder.append("SELECT " + allColum + " FROM " + tableName + " WHERE 1=1 ");// builder.append(" <if test=\"id != null\"> and id like #{id} </if>");// 查询条件builder.append(createLikelySql(keyArr, clas, cols));// 排序builder.append(" <if test=\"ORDERBY != null\"> order by ${ORDERBY} </if>");// 分页builder.append(" <if test=\"pagestart != null\"> limit #{pagesize} OFFSET #{pagestart} </if>"); builder.append("</select>");/****************** 查询 end ***************//****************** 计数 start ***************/builder.append("<select id=\"" + name + ".count\" resultType=\"long\" >");builder.append("SELECT count(*) count FROM " + tableName + " WHERE 1=1 ");builder.append(createLikelySql(keyArr, clas, cols));builder.append("</select>");/****************** 计数 end ***************//****************** 精确查询 start ***************/builder.append("<select id=\"" + name + ".selectexactly\" resultMap=\"" + name + "\" >");builder.append("SELECT " + allColum + " FROM " + tableName + " WHERE 1=1 ");// builder.append(" <if test=\"id != null\"> and id like #{id} </if>");// 查询条件builder.append(createExactlySql(keyArr, clas, cols));// 排序builder.append(" <if test=\"ORDERBY != null\"> order by ${ORDERBY} </if>");// 分页builder.append(" <if test=\"pagestart != null\"> limit #{pagesize} OFFSET #{pagestart} </if>"); builder.append("</select>");/****************** 精确查询 end ***************//****************** 精确计数 start ***************/builder.append("<select id=\"" + name + ".countexactly\" resultType=\"long\" >");builder.append("SELECT count(*) count FROM " + tableName + " WHERE 1=1 ");builder.append(createExactlySql(keyArr, clas, cols));builder.append("</select>");/****************** 精确计数 end ***************//****************** ⾃定义条件语句查询 start ***************/builder.append("<select id=\"" + name + ".selectwhere\" resultMap=\"" + name + "\" >");builder.append("SELECT " + allColum + " FROM " + tableName + " ");// 查询条件builder.append(" <if test=\"WHERESTR != null\"> WHERE ${WHERESTR} </if>");// 排序builder.append(" <if test=\"ORDERBY != null\"> order by ${ORDERBY} </if>");// 分页builder.append(" <if test=\"pagestart != null\"> limit #{pagesize} OFFSET #{pagestart} </if>"); builder.append("</select>");/****************** ⾃定义条件语句查询 end ***************//****************** ⾃定义条件语句计数 start ***************/builder.append("<select id=\"" + name + ".countwhere\" resultType=\"long\" >");builder.append("SELECT count(*) count FROM " + tableName + " ");// 查询条件builder.append(" <if test=\"WHERESTR != null\"> WHERE ${WHERESTR} </if>");builder.append("</select>");/****************** ⾃定义条件语句计数 end ***************//****************** 删除 start ***************/builder.append("<delete id=\"" + name + ".delete\" parameterType=\"ng.String\" >");builder.append(" DELETE FROM " + tableName + " WHERE id =#{id} ");builder.append("</delete>");/****************** 删除 end ***************//****************** 批量删除 start ***************/builder.append("<delete id=\"" + name + ".deletebatch\" >");builder.append(" DELETE FROM " + tableName + " WHERE 1=1 ");builder.append(createExactlySql(keyArr, clas, cols));builder.append("</delete>");/****************** 批量删除 end ***************//****************** 更新 start ***************/builder.append("<update id=\"" + name + ".update\" parameterType=\"" + name + "\" >");builder.append("UPDATE " + tableName + " SET ");for (int i = 0; i < keyArr.length; i++) {String key = keyArr[i];Map<String, Object> obj = cols.get(key);builder.append(" " + (String) obj.get("dbname") + " = #{" + key + "}");if (i < (keyArr.length - 1)) {builder.append(",");}}builder.append(" WHERE id =#{id} ");builder.append("</update>");/****************** 更新 end ***************//****************** 按需更新 start ***************/builder.append("<update id=\"" + name + ".updatesection\" parameterType=\"" + name + "\" >");builder.append("UPDATE " + tableName + " SET ");for (int i = 0; i < keyArr.length; i++) {String key = keyArr[i];Map<String, Object> obj = cols.get(key);// builder.append(" " + (String) obj.get("dbname") + " = #{" + key +// "}");if (!"id".equals(key)) {builder.append(" <if test=\"_parameter.containsKey('" + key + "')\">" + (String) obj.get("dbname") + " = #{" + key + "} , </if>");// builder.append(" " + (String) obj.get("dbname") + " = #{" + key + "} , ");}}builder.append(" id = #{id} ");builder.append(" WHERE id =#{id} ");builder.append("</update>");/****************** 按需更新 end ***************//****************** 插⼊ start ***************/builder.append("<insert id=\"" + name + ".insert\" parameterType=\"" + name + "\" >");builder.append("insert INTO " + tableName + " (" + allColum + ") VALUES");builder.append("(" + getColumListString2(cols, "#{", "}") + ") ");builder.append("</insert>");/****************** 插⼊ end ***************/builder.append("</mapper>");InputStream is = new ByteArrayInputStream(builder.toString().getBytes());return is;}private String createListXml() {StringBuilder builder = new StringBuilder();return builder.toString();}/*** ⽣成查询条件语句** @param keyArr* @param clas* @param cols* @return*/private String createLikelySql(String[] keyArr, Class<?> clas, Map<String, Map<String, Object>> cols) {StringBuilder builder = new StringBuilder();for (int i = 0; i < keyArr.length; i++) {String key = keyArr[i];Map<String, Object> obj = cols.get(key);try {Class t = (Class) obj.get("type");if (t == String.class) {// String 类型⾃动⽀持like '%' || #name# || '%'builder.append(" <if test=\"" + key + " != null\"> and " + (String) obj.get("dbname")+ " like '%'||#{" + key + "}|| '%' </if>");} else {builder.append(" <if test=\"" + key + " != null\"> and " + (String) obj.get("dbname") + " = #{"+ key + "} </if>");}} catch (Exception e) {(obj);(key);(clas.getName());}}return builder.toString();}private String createExactlySql(String[] keyArr, Class<?> clas, Map<String, Map<String, Object>> cols) { StringBuilder builder = new StringBuilder();for (int i = 0; i < keyArr.length; i++) {String key = keyArr[i];Map<String, Object> obj = cols.get(key);builder.append(" <if test=\"" + key + " != null\"> and " + (String) obj.get("dbname") + " = #{" + key + "} </if>"); }return builder.toString();}/*** 获取表内字段** @param cols* @return*/private String getColumListString(Map<String, Map<String, Object>> cols) {return getColumListString(cols, "", "");}private String getColumListString(Map<String, Map<String, Object>> cols, String pre, String end) {pre = pre == null ? "" : pre;end = end == null ? "" : end;Set<String> keys = cols.keySet();String[] keyArr = new String[keys.size()];String[] nameArr = new String[keys.size()];keys.toArray(keyArr);for (int i = 0; i < keyArr.length; i++) {String key = keyArr[i];Map<String, Object> obj = cols.get(key);if (((String) obj.get("dbname")).equals("update_date")) {("key");}nameArr[i] = pre + (String) obj.get("dbname") + end;}return StringUtils.join(nameArr);}private String getColumListString2(Map<String, Map<String, Object>> cols) {return getColumListString2(cols, "", "");}private String getColumListString2(Map<String, Map<String, Object>> cols, String pre, String end) {pre = pre == null ? "" : pre;end = end == null ? "" : end;Set<String> keys = cols.keySet();String[] keyArr = new String[keys.size()];String[] nameArr = new String[keys.size()];keys.toArray(keyArr);for (int i = 0; i < keyArr.length; i++) {String key = keyArr[i];nameArr[i] = pre + key + end;}return StringUtils.join(nameArr);}/*** 根据@Column注解⽣成字段映射关系** @param configuration* @param Map<String,* Map<String, Object>> cols* @return*/private List<ResultMapping> getResultMapping(org.apache.ibatis.session.Configuration configuration,Map<String, Map<String, Object>> cols) {List<ResultMapping> resultMappings = new ArrayList<ResultMapping>();System.out.println(cols);Set<String> keys = cols.keySet();String[] keyArr = new String[keys.size()];keys.toArray(keyArr);for (String key : keyArr) {String property;String column;Object javaType;Map<String, Object> map = cols.get(key);property = key;column = (String) map.get("dbname");javaType = map.get("type");ResultMapping mapping = new ResultMapping.Builder(configuration, property, column, (Class<?>) javaType) .build();resultMappings.add(mapping);}return resultMappings;}}应⽤CommonDaoimpl/*** CommonDaoimpl* <p>* Title: CommonDaoimpl.java* </p>* <p>* Description:* </p>** @author lichao1* @date 2018年11⽉19⽇* @version 1.0* @param <T>* @param <ID>*/@Repositorypublic class CommonDaoimpl<T, ID extends Serializable> implements ICommonDao<T, ID> {@PersistenceContextprivate EntityManager entityManager;@Autowiredpublic SqlSessionFactory sqlSessionFactory;protected <T> String getStatement(Class<T> clazz, String prefix) {String entityName = clazz.getSimpleName();if (entityName.endsWith("Model")) {entityName = entityName.substring(0, entityName.length() - 5);}if (entityName.endsWith("Entity")) {entityName = entityName.substring(0, entityName.length() - 6);}entityName = prefix + entityName;return entityName;}// Mybatis 查询⽅法,只需要输⼊mapper的命名空间名称和⽅法名就可以实现数据库操作/*** 执⾏删除语句* @param statement* @param parameter* @return*/public int deleteByMyBatis(String statement, Object parameter) {return this.sqlSessionFactory.openSession().delete(statement, parameter);}/*** 执⾏删除语句* @param t* @param funName* @param parameter* @return*/public int deleteByMyBatis(Class<T> t, String funName, Object parameter) {String statement = t.getName() + "." + funName;return deleteByMyBatis(statement, parameter);}public int deleteByMyBatis(Class<T> t, Object parameter) {String statement = t.getName() + "." + "delete";return deleteByMyBatis(statement, parameter);}/*** 执⾏查询列表* @param statement* @param parameter* @return*/public List<T> listByMyBatis(String statement, Object parameter) {return this.sqlSessionFactory.openSession().selectList(statement, parameter); }/*** 执⾏查询列表语句* @param t* @param funName* @param parameter* @return*/public List<T> listByMyBatis(Class<T> t, String funName, Object parameter) { String statement = t.getName() + "." + funName;return listByMyBatis(statement, parameter);}public List<T> ListByMyBatis(Class<T> t, Object parameter){String statement = t.getName() + "." + "select";return listByMyBatis(statement, parameter);}/*** 执⾏插⼊语句* @param statement* @param parameter* @return*/public int insertByMyBatis(String statement, Object parameter) {return this.sqlSessionFactory.openSession().insert(statement, parameter);}/*** 执⾏插⼊语句* @param t* @param funName* @param parameter* @return*/public int insertByMyBatis(Class<T> t, String funName, Object parameter) {String statement = t.getName() + "." + funName;return insertByMyBatis(statement, parameter);}/*** 执⾏选择⼀条记录语句* @param statement* @param parameter* @return*/public T selectOneByMyBatis(String statement, Object parameter) {return this.sqlSessionFactory.openSession().selectOne(statement, parameter); }/*** 执⾏选择⼀条记录语句* @param t* @param funName* @param parameter* @return*/public T selectOneByMyBatis(Class<T> t, String funName, Object parameter) { String statement = t.getName() + "." + funName;return selectOneByMyBatis(statement, parameter);}/*** 计数* @param t* @param parameter* @return*/public long countByMyBatis(String statement, Object parameter) {return (long)this.sqlSessionFactory.openSession().selectOne(statement, parameter); }public long countByMyBatis(Class<?> t, Object parameter){String statement = t.getName() + ".count";return countByMyBatis(statement, parameter);}/*** 更新数据* @param statement* @param parameter* @return*/public int updateByMyBatis(String statement, Object parameter) {return this.sqlSessionFactory.openSession().update(statement, parameter);}/*** 更新数据* @param t* @param funName* @param parameter* @return*/public int updateByMyBatis(Class<T> t, String funName, Object parameter) {String statement = t.getName() + "." + funName;return updateByMyBatis(statement, parameter);}public int updateByMyBatis(Class<T> t, Object parameter) {String statement = t.getName() + ".update";return updateByMyBatis(statement, parameter);}/*** 插⼊数据* @param statement* @param parameter* @return*/public int insertByMayBatis(String statement, Object parameter) {return this.sqlSessionFactory.openSession().insert(statement, parameter);}public int insertByMayBatis(Class<T> t, String funName, Object parameter) {String statement = t.getName() + "." + funName;return this.sqlSessionFactory.openSession().insert(statement, parameter);}public int insertByMayBatis(Class<T> t, Object parameter) {return insertByMayBatis(t,"insert", parameter);}。

增删改查思路及步骤

增删改查思路及步骤

增删改查思路及步骤1.引言1.1 概述在编写本文时,我们将介绍增删改查(CRUD)操作的思路和步骤。

增删改查是指对数据进行新增、删除、修改和查询的一系列操作。

这些操作在软件开发和数据管理中非常常见,是许多应用程序和系统的重要组成部分。

增加数据的操作是指向数据库或其他数据存储系统添加新的数据记录。

在进行增加数据操作时,我们需要明确所需添加的数据内容,并确保该数据满足预设的数据模型和结构。

删除数据的操作是指从数据库或其他数据存储系统中移除已有的数据记录。

在执行删除数据操作时,我们需要明确要删除的数据的标识或位置,并确保该删除操作不会对其他相关数据产生意外影响。

修改数据的操作是指对数据库或其他数据存储系统中的既有数据进行更新或修改。

在进行修改数据操作时,我们需要明确要修改的数据的标识和要进行的修改内容,并确保该修改操作不会破坏现有的数据完整性和一致性。

查询数据的操作是指根据特定条件从数据库或其他数据存储系统中获取所需的数据记录。

在进行查询数据操作时,我们需要明确所需数据的条件和查询方式,并确保查询结果的准确性和完整性。

通过本文我们将详细介绍每种操作的思路和步骤,并提供相关示例和实践经验。

我们希望读者在阅读本文后能够全面了解增删改查操作,并能够在实际应用中灵活运用这些操作。

最后,我们还将总结增删改查操作的思路和步骤,并提出未来进一步研究的方向,以推动这一领域的发展和创新。

1.2 文章结构本文将以增删改查(CRUD)的思路和步骤为主线,探讨在数据处理中的重要性和具体实施方法。

文章将分为以下几个主要部分:(1)引言:介绍本文的主题和背景,包括增删改查的概念和在实际应用中的重要性。

同时,对文章的结构和目的进行简要说明。

(2)正文:本部分将重点讨论增加数据、删除数据、修改数据和查询数据的思路和步骤。

对于每个操作,我们将阐述其背后的原理和方法,并提供具体的实例和步骤说明。

这将有助于读者全面理解和掌握增删改查的基本操作。

Mybatis实现数据的增删改查(CRUD)+++

Mybatis实现数据的增删改查(CRUD)+++

Mybatis实现数据的增删改查(CRUD)什么是MyBatis?MyBatis 是支持普通SQL 查询,存储过程和高级映射的优秀持久层框架。

MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及对结果集的检索。

MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和Java 的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

MyBatis下载:https:///mybatis/mybatis-3/releasesMybatis实例对一个User表的CRUD操作:User表:-- ------------------------------ Table structure for `user`-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`userName` varchar(50) DEFAULT NULL,`userAge` int(11) DEFAULT NULL,`userAddress` varchar(200) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'summer', '30', 'shanghai');INSERT INTO `user` VALUES ('2', 'test2', '22', 'suzhou');INSERT INTO `user` VALUES ('3', 'test1', '29', 'some place');INSERT INTO `user` VALUES ('4', 'lu', '28', 'some place');INSERT INTO `user` VALUES ('5', 'xiaoxun', '27', 'nanjing');在Src目录下建一个mybatis的xml配置文件Configuration.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!-- mybatis别名定义--><typeAliases><typeAlias alias="User" type="er"/></typeAliases><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://127.0.0.1:3306/mybatis"/><property name="username" value="root"/><property name="password" value="admin"/></dataSource></environment></environments><!-- mybatis的mapper文件,每个xml配置文件对应一个接口--><mappers><mapper resource="com/mybatis/test/User.xml"/></mappers></configuration>定义User mappers的User.xml配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.mybatis.test.IUserOperation"><!-- select语句--><select id="selectUserByID" parameterType="int" resultType="User">select * from `user` where user.id = #{id}</select><!-- 定义的resultMap,可以解决类的属性名和数据库列名不一致的问题--><!-- <resultMap type="User" id="userResultMap"><id property="id" column="user_id" /><result property="userName" column="user_userName" /><result property="userAge" column="user_userAge" /><result property="userAddress" column="user_userAddress" /></resultMap> --><!-- 返回list的select语句,注意resultMap的值是指向前面定义好的--><!-- <select id="selectUsersByName" parameterType="string" resultMap="userResultMap">select * from user where erName = #{userName}</select> --><select id="selectUsersByName" parameterType="string" resultType="User">select * from user where erName = #{userName}</select><!--执行增加操作的SQL语句。

mybatis删除方法编写

mybatis删除方法编写MyBatis 是一个开源的持久层框架,用于简化数据库操作。

在 MyBatis 中,删除操作可以通过 SQL 语句或者注解方式实现。

下面分别介绍这两种方式的删除方法。

1. SQL 语句方式使用 SQL 语句方式实现删除操作,需要编写相应的 SQL 语句,并将其传递给 MyBatis。

具体步骤如下:```// 创建 SQL 语句String sql = "DELETE FROM table_name WHERE condition";// 将 SQL 语句传递给 MyBatisMapper mapper = new Mapper();Result result = mapper.执行 SQL 语句 (sql);```在上面的代码中,“table_name”是要删除的表名,“condition”是删除条件,可以根据实际需要进行修改。

MyBatis 会根据 SQL 语句中的条件进行筛选,并执行相应的操作。

2. 注解方式使用注解方式实现删除操作,需要在相应的映射文件中进行注解,并将注解传递给 MyBatis。

具体步骤如下:```// 定义注解@Delete("DELETE FROM table_name WHERE condition")public void deleteItem(@Param("condition") String condition);```在上面的代码中,“@Delete”是注解的名称,“table_name”是要删除的表名,“condition”是删除条件。

MyBatis 会根据注解中的参数进行筛选,并执行相应的操作。

使用注解方式实现删除操作,可以更加灵活地定义 SQL 语句,并且可以减少代码的编写量。

无论是使用 SQL 语句方式还是注解方式,都需要根据实际需求进行选择。

在实际开发中,应该根据具体情况进行选择,并不断优化代码,以提高代码的可读性和可维护性。

mybatis语法

mybatis语法MyBatis是一种优秀的持久层框架,是基于Java的持久层框架。

它的最大特点就是采用XML文件或注解的形式来配置数据库操作,使用MyBatis以后可以进行SQL语句的操作,这使得工作更加简单快捷。

本文就MyBatis语法相关知识来进行介绍。

MyBatis语法框架中使用了4种不同类型的语句,分别是:Select,Insert,Update和Delete。

这4种语句是数据库操作的4大基本操作,只要通过这4种基本操作可以完成90%以上的数据库操作,这就是MyBatis语法框架的核心所在。

首先来看看Select语句,它的作用是从数据库中查询满足条件的数据,它的语法格式如下:Select * from TableName where Condition;其中,TableName表示数据表的名称,Condition是查询条件,比如可以指定查询某个字段的值等等。

接下来看看Insert语句,它的作用是向数据库中插入一行新数据,它的语法格式如下:Insert into TableName(Column1, Column2,…values(Value1, Value2,…);其中,TableName表示数据表的名称,Column1和Column2表示需要插入的字段,Value1和Value2表示插入字段的值。

接下来看看Update语句,它的作用是更新数据库中的数据,它的语法格式如下:Update TableName set Column1=Value1,Column2=Value2 where Condition;其中,TableName表示数据表的名称,Column1和Column2表示需要更新的字段,Value1和Value2表示更新字段的值,Condition 是查询条件,表示需要更新哪些数据。

最后看看Delete语句,它的作用是删除数据库中的数据,它的语法格式如下:Delete from TableName where Condition;其中,TableName表示数据表的名称,Condition是查询条件,表示需要删除哪些数据。

mybatis saveorupdate 自定义条件

mybatis saveorupdate 自定义条件全文共四篇示例,供读者参考第一篇示例:MyBatis是一个非常流行的Java持久化框架,它使用简单的XML 文件或注解配置来映射Java对象和数据库表。

在使用MyBatis进行增删改查操作时,最常见的就是保存或更新数据的操作。

通常我们会使用insert和update两个SQL语句来实现保存或更新数据的功能。

但是有时候我们希望在保存或更新数据时,可以自定义一些条件来决定是执行保存操作还是更新操作。

比如我们希望在执行保存操作时,如果数据库中已经存在相同主键的数据,则执行更新操作,如果不存在则执行保存操作。

这样就可以避免出现主键冲突的情况。

在MyBatis中,可以通过自定义条件来实现这样的功能。

一般来说,在MyBatis中实现saveOrUpdate的功能有两种常见的方式:第一种方式是使用<selectKey>和<if>标签来实现。

在执行insert 操作时,使用<selectKey>标签获取数据库生成的主键值,然后通过<if>标签判断主键值是否存在,如果存在则执行更新操作,如果不存在则执行保存操作。

```xml<insert id="saveOrUpdate"parameterType="er"><selectKey keyProperty="id"resultType="ng.Long" order="BEFORE">SELECT IFNULL(MAX(id), 0) + 1 FROM user</selectKey>INSERT INTO user(id, name) VALUES (#{id}, #{name})ON DUPLICATE KEY UPDATE name = #{name}</insert>```在上面的示例中,<selectKey>标签会获取数据库中最大的主键值,并将其赋给参数对象中的id属性。

mybatis plus saveorupdate实现原理

mybatis plus saveorupdate实现原理MyBatisPlus是一款基于MyBatis的增强工具,提供了许多方便的CRUD操作。

其中,SaveOrUpdate方法是一个非常常用的功能,用于实现数据的增删改操作。

本文将介绍MyBatisPlusSaveOrUpdate实现原理,帮助读者更好地理解和使用该方法。

一、SaveOrUpdate方法简介SaveOrUpdate方法是MyBatisPlus提供的一个便捷方法,用于将一条数据插入或更新到数据库中。

该方法接收一个参数,即待插入或更新的数据对象。

如果该数据对象已经存在于数据库中,则更新该数据;如果不存在,则将其插入到数据库中。

二、实现原理1.判断数据对象是否为空在SaveOrUpdate方法中,首先需要判断传入的数据对象是否为空。

如果为空,则直接抛出异常;如果不为空,则进行下一步操作。

2.解析SQL语句MyBatisPlus通过XML或注解的方式配置SQL语句,SaveOrUpdate方法会根据传入的数据对象自动生成对应的SQL语句。

具体来说,会根据数据对象的字段和数据库表结构,生成对应的INSERT或UPDATE语句。

3.执行SQL语句生成SQL语句后,MyBatisPlus会通过MyBatis的执行机制,将SQL语句发送到数据库执行。

具体来说,会通过SqlSession执行器执行该SQL语句,并将结果返回给调用者。

4.事务处理在执行SQL语句的过程中,可能会涉及到多个数据库操作,因此需要使用事务进行处理。

MyBatisPlus会自动开启事务,并在操作完成后提交事务,以保证数据的一致性。

三、注意事项1.数据库表结构匹配为了保证SaveOrUpdate方法的正确性,需要确保数据库表结构和数据对象的字段匹配。

否则,可能会出现插入失败或更新错误的情况。

2.数据对象唯一性约束如果数据对象的某个字段具有唯一性约束(如主键),则需要在SQL语句中添加相应的约束条件,以确保插入或更新操作的正确性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mybatis实现数据的增删改查(CRUD)什么是 MyBatis?MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。

MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。

MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

MyBatis下载:https:///mybatis/mybatis-3/releasesMybatis实例对一个User表的CRUD操作:User表:-- ------------------------------ Table structure for `user`-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(11NOT NULL AUTO_INCREMENT,`userName` varchar(50 DEFAULT NULL,`userAge` int(11 DEFAULT NULL,`userAddress` varchar(200 DEFAULT NULL,PRIMARY KEY (`id`ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'summer', '30', 'shanghai';INSERT INTO `user` VALUES ('2', 'test2', '22', 'suzhou';INSERT INTO `user` VALUES ('3', 'test1', '29', 'some place';INSERT INTO `user` VALUES ('4', 'lu', '28', 'some place';INSERT INTO `user` VALUES ('5', 'xiaoxun', '27', 'nanjing';在Src目录下建一个mybatis的xml配置文件Configuration.xmlxml version="1.0" encoding="UTF-8" ?>DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias alias="User" type="er"/>typeAliases><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://127.0.0.1:3306/mybatis"/><property name="username" value="root"/><property name="password" value="admin"/>dataSource>environment>environments><mappers><mapper resource="com/mybatis/test/User.xml"/>mappers>configuration>定义User mappers的User.xml配置文件xml version="1.0" encoding="UTF-8" ?>DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.mybatis.test.IUserOperation"><select id="selectUserByID" parameterType="int" resultType="User">select * from `user` where user.id = #{id}select><select id="selectUsersByName" parameterType="string" resultType="User">select * from user where erName = #{userName}select><insert id="addUser" parameterType="User"useGeneratedKeys="true" keyProperty="id">insert into user(userName,userAge,userAddressvalues(#{userName},#{userAge},#{userAddress}insert><update id="updateUser" parameterType="User">update user setuserName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}update><delete id="deleteUser" parameterType="int">delete from user where id=#{id}delete>mapper>配置文件实现了接口和SQL语句的映射关系。

selectUsersByName采用了2种方式实现,注释掉的也是一种实现,采用resultMap可以把属性和数据库列名映射关系定义好,property为类的属性,column是表的列名,也可以是表列名的别名!User类的定义:package com.mybatis.test;public class User {private int id;private String userName;private int userAge;private String userAddress;public int getId( {return id;}public void setId(int id {this.id = id;}public String getUserName( {return userName;}public void setUserName(String userName {erName = userName;}public int getUserAge( {return userAge;}public void setUserAge(int userAge {erAge = userAge;}public String getUserAddress( {return userAddress;}public void setUserAddress(String userAddress {erAddress = userAddress;}@Overridepublic String toString({return erName+" "+erAge+" "+erAddress; }}IUserOperaton定义:package com.mybatis.test;import java.util.List;public interface IUserOperation {public User selectUserByID(int id;public List selectUsersByName(String userName;public void addUser(User user;public void updateUser(User user;public void deleteUser(int id;}IUserOperation为操作接口,函数名和mybatis的xml配置文件中的操作id名对应。

测试类Test:package com.mybatis.test;import java.io.Reader;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; public class Test {private static SqlSessionFactory sqlSessionFactory;private static Reader reader;static {try {reader = Resources.getResourceAsReader("Configuration.xml"; sqlSessionFactory = new SqlSessionFactoryBuilder(.build(reader; } catch (Exception e {e.printStackTrace(;}}public static SqlSessionFactory getSession( {return sqlSessionFactory;}public void getUserByID(int userID {SqlSession session = sqlSessionFactory.openSession(;try {IUserOperation userOperation = session.getMapper(IUserOperation.class;User user = userOperation.selectUserByID(userID;if (user != null {System.out.println(user.getId( + ":" + user.getUserName( + ":" + user.getUserAddress(;}} finally {session.close(;}}public void getUserList(String userName {SqlSession session = sqlSessionFactory.openSession(;try {IUserOperation userOperation = session.getMapper(IUserOperation.class;List users = userOperation.selectUsersByName(userName; for (User user : users {System.out.println(user.getId( + ":" + user.getUserName( + ":" + user.getUserAddress(;}} finally {session.close(;}}/*** 增加后要commit*/public void addUser( {User user = new User(;user.setUserAddress("place";user.setUserName("test_add";user.setUserAge(30;SqlSession session = sqlSessionFactory.openSession(; try {IUserOperation userOperation = session.getMapper(IUserOperation.class; userOperation.addUser(user;mit(;System.out.println("新增用户ID:" + user.getId(;} finally {session.close(;}}/*** 修改后要commit*/public void updateUser( {SqlSession session = sqlSessionFactory.openSession(; try {IUserOperation userOperation = session.getMapper(IUserOperation.class;User user = userOperation.selectUserByID(1;if (user != null {user.setUserAddress("A new place"; userOperation.updateUser(user;mit(;}} finally {session.close(;}}/*** 删除后要commit.** @param id*/public void deleteUser(int id {SqlSession session = sqlSessionFactory.openSession(; try {IUserOperation userOperation = session .getMapper(IUserOperation.class; userOperation.deleteUser(id; mit(;} finally {session.close(;}}public static void main(String[] args { try {Test test = new Test(;// test.getUserByID(1;// test.getUserList("test1";// test.addUser(;// test.updateUser(;// test.deleteUser(6;} catch (Exception e {System.out.println(e.getMessage(;}}}。

相关文档
最新文档