当前位置: 首页 > news >正文

12306网站多钱做的网站软文是什么

12306网站多钱做的,网站软文是什么,答题小程序开发教程,哪有做网站的文章目录 Mybatis如何执行批量操作使用foreach标签 使用ExecutorType.BATCH如何获取生成的主键 Mybatis如何执行批量操作 使用foreach标签 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach标签的属性主要有item,index&…

文章目录

    • Mybatis如何执行批量操作
      • 使用foreach标签
    • 使用ExecutorType.BATCH
      • 如何获取生成的主键

Mybatis如何执行批量操作

使用foreach标签

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach标签的属性主要有item,index,collection,open,separator,close。
item  表示集合中每一个元素进行迭代时的别名,随便起的变量名;
index  指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用;
open  表示该语句以什么开始,常用“(”;
separator表示在每次进行迭代之间以什么符号作为分隔符,常用“,”;
close 表示以什么结束,常用“)”。
在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:

  • 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
  • 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
  • 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key
    具体用法如下:
<!-- 批量保存(foreach插入多条数据两种方法)int addEmpsBatch(@Param("emps") List<Employee> emps); -->
<!-- MySQL下批量保存,可以foreach遍历 mysql支持values(),(),()语法 --> //推荐使用
<insert id="addEmpsBatch">INSERT INTO emp(ename,gender,email,did)VALUES<foreach collection="emps" item="emp" separator=",">(#{emp.eName},#{emp.gender},#{emp.email},#{emp.dept.id})</foreach>
</insert>
<!-- 这种方式需要数据库连接属性allowMutiQueries=true的支持如jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true -->  
<insert id="addEmpsBatch"><foreach collection="emps" item="emp" separator=";">                                 INSERT INTO emp(ename,gender,email,did)VALUES(#{emp.eName},#{emp.gender},#{emp.email},#{emp.dept.id})</foreach>
</insert>

使用ExecutorType.BATCH

Mybatis内置的ExecutorType有3种,默认为simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优; 但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的

具体用法如下

//批量保存方法测试
@Test  
public void testBatch() throws IOException{SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//可以执行批量操作的sqlSessionSqlSession openSession = sqlSessionFactory.openSession(ExecutorType.BATCH);//批量保存执行前时间long start = System.currentTimeMillis();try {EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);for (int i = 0; i < 1000; i++) {mapper.addEmp(new Employee(UUID.randomUUID().toString().substring(0, 5), "b", "1"));}openSession.commit();long end = System.currentTimeMillis();//批量保存执行后的时间System.out.println("执行时长" + (end - start));//批量 预编译sql一次==》设置参数==》10000次==》执行1次   677//非批量  (预编译=设置参数=执行 )==》10000次   1121} finally {openSession.close();}
}

mapper和mapper.xml如下

public interface EmployeeMapper {   //批量保存员工Long addEmp(Employee employee);
}
<mapper namespace="com.jourwon.mapper.EmployeeMapper"<!--批量保存员工 --><insert id="addEmp">insert into employee(lastName,email,gender)values(#{lastName},#{email},#{gender})</insert>
</mapper>

如何获取生成的主键

对于支持主键自增的数据库(MySQL)

<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" >insert into user( user_name, user_password, create_time) values(#{userName}, #{userPassword} , #{createTime, jdbcType= TIMESTAMP})
</insert>

parameterType 可以不写,Mybatis可以推断出传入的数据类型。如果想要访问主键,那么应当parameterType 应当是java实体或者Map。这样数据在插入之后 可以通过ava实体或者Map 来获取主键值。通过 getUserId获取主键

不支持主键自增的数据库(Oracle)

对于像Oracle这样的数据,没有提供主键自增的功能,而是使用序列的方式获取自增主键。
可以使用<selectKey>标签来获取主键的值,这种方式不仅适用于不提供主键自增功能的数据库,也适用于提供主键自增功能的数据库
<selectKey>一般的用法

<selectKey keyColumn="id" resultType="long" keyProperty="id" order="BEFORE">
</selectKey> 

在这里插入图片描述

<insert id="insertUser" ><selectKey keyColumn="id" resultType="long" keyProperty="userId" order="BEFORE">SELECT USER_ID.nextval as id from dual </selectKey> insert into user( user_id,user_name, user_password, create_time) values(#{userId},#{userName}, #{userPassword} , #{createTime, jdbcType= TIMESTAMP})
</insert>

此时会将Oracle生成的主键值赋予userId变量。这个userId 就是USER对象的属性,这样就可以将生成的主键值返回了。如果仅仅是在insert语句中使用但是不返回,此时keyProperty=“任意自定义变量名”,resultType 可以不写。
Oracle 数据库中的值要设置为 BEFORE ,这是因为 Oracle中需要先从序列获取值,然后将值作为主键插入到数据库中。

扩展
如果Mysql 使用selectKey的方式获取主键,需要注意下面两点:

order : AFTER
获取递增主键值 :SELECT LAST_INSERT_ID()

当实体类中的属性名和表中的字段名不一样 ,怎么办
第1种: 通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。

<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};
</select>

第2种: 通过<resultMap>来映射字段名和实体类属性名的一一对应的关系。

<select id="getOrder" parameterType="int" resultMap="orderResultMap">select * from orders where order_id=#{id}
</select><resultMap type="com.jourwon.pojo.Order" id="orderResultMap"><!–用id属性来映射主键字段–><id property="id" column="order_id"><!–用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性–><result property ="orderno" column ="order_no"/><result property="price" column="order_price" />
</reslutMap>

http://www.mnyf.cn/news/40778.html

相关文章:

  • 重庆有专业做网站的吗电脑培训学校课程
  • 厦门网站建设 软件园国家职业技能培训平台
  • 北京做网站建设的公司哪家好涟源网站seo
  • 做网站个人备案郑州做网站的大公司
  • wordpress自动标签添加内链插件宁波seo推荐
  • 漳州市网站建设公司肇庆网站搜索排名
  • 网站后台管理系统模板seo的方法有哪些
  • 二百块做网站石家庄疫情最新消息
  • 重庆网站建设哪家做的好百度网站ip地址
  • 软件开发和网站开发哪个更好如何免费创建自己的平台
  • 做网站漯河搜索热词排名
  • php建网站网站网上推广
  • 上海最专业的网站设计制购物网站如何推广
  • 做字画的网站zac seo博客
  • 代做备案网站百度seo排名优化软件
  • 做良心网站网络营销师报名入口
  • 济南微网站建设市场seo是什么
  • 重庆云阳网站建设公司推荐百度推广没有效果怎么办
  • 网站建设报价天津网站推广
  • 汽车音响网站建设怎么建立自己的网站平台
  • 兰州做网站的友情链接样式
  • 东莞市营销网站建设百度seo网站优化
  • 网站做外链的方式百度关键词排名技术
  • 地方门户网站源码seo推广培训中心
  • 简单手机网站开发软件有哪些抖音搜索关键词排名
  • 给前端做网站的图片叫什么seo网站优化培训怎么做
  • wordpress炫酷主题成都seo培训班
  • 怎样建个人网站长春网络推广优化
  • 茂名免费做网站怎样做好服务营销
  • 黑彩网站建设运营seo工程师是什么职业