发表于: 2018-04-08 22:53:30

2 657


今天完成的事情:

1.jdbcTemplate修改后返回值,批量添加和mybatis的批量添加

2.java data方法

3.深度思考的几个问题


1.批量操作

jdbcTemplate的批量操作:

service层:

//    添加数据,获取返回值
   @Override
   public int insertUser(User user) {

//        留方法修改
       String sql = "insert into jnshu_user (name,school,stu_num,type,qq,age,sex,pro,brother,daily_link,start_time) values (?,?,?,?,?,?,?,?,?,?,?)";
//        不返回参数直接使用update就可以了
//        jdbctemplate.update(sql,user);

//      返回参数需要自己重写方法
       KeyHolder keyHolder = new GeneratedKeyHolder();
jdbctemplate.update(new PreparedStatementCreator() {
@Override
           public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement pstmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstmt.setObject(1,user.getName());
pstmt.setObject(2,user.getSchool());
pstmt.setObject(3,user.getStu_num());
pstmt.setObject(4,user.getType());
pstmt.setObject(5,user.getQq());
pstmt.setObject(6,user.getAge());
pstmt.setObject(7,user.getSex());
pstmt.setObject(8,user.getPro());
pstmt.setObject(9,user.getBrother());
pstmt.setObject(10,user.getDaily_link());
pstmt.setObject(11,user.getStart_time());
return pstmt;
}
},keyHolder);

return keyHolder.getKey().intValue();
}

如果需要返回值的话就需要我们自己重写它的方法

PreparedStatementCreator是为了实现PreparedStatement方法。

如果需要返回集合可以把keyHolder替换为new RowMapper,然后重写它的方法获取。

KeyHolder:在匿名内部类中修改外围实例数据

public interface KeyHolder {
@Nullable
Number getKey() throws InvalidDataAccessApiUsageException;

@Nullable
Map<String, Object> getKeys() throws InvalidDataAccessApiUsageException;

List<Map<String, Object>> getKeyList();
}


批量添加:

//    批量添加
   @Override
   public void insertList(List<User> list) {

String sql = "insert into jnshu_user (name,school,stu_num,type,qq,age,sex,pro,brother,daily_link,start_time) values (?,?,?,?,?,?,?,?,?,?,?)";

List<Object[]> users = new ArrayList<>();
//        循环添加
       for(User user : list){
Object[] ob = new Object[]{
user.getName(),
user.getSchool(),
user.getStu_num(),
user.getType(),
user.getQq(),
user.getAge(),
user.getSex(),
user.getPro(),
user.getBrother(),
user.getDaily_link(),
user.getStart_time()
};
users.add(ob);
//            users.add(new Object[]{user.getName(),user.getSchool(),user.getStu_num(),user.getType(),user.getQq(),user.getAge(),user.getSex(),user.getPro(),user.getBrother(),user.getDaily_link(),user.getStart_time()});
       }

jdbctemplate.batchUpdate(sql,users);

}

这里for循环里的 Object[ ] 是储存User对象的属性,通过循环添加进Users数组里面,对应sql语句里的 “?” 然后执行batchUpdate批量查询


相较之下mybatis是在xml映射语句里直接循环的:

<insert id="insertPersonList" parameterType="mybatis.model.Person"  useGeneratedKeys="true">
INSERT INTO person(id,create_at,update_at,name,age,sex,pro,tell,qq,email,stu_num,waikey)
values
<foreach  item="item" collection="list" separator="," index = "index">
(#{item.id},#{item.create_at},#{item.update_at},#{item.name},#{item.age},#{item.sex},#{item.tell},#{item.qq},#{item.email},#{item.pro},#{stu_num},#{item.waikey})
</foreach>
</insert>

而修改获取返回值也是在xml映射语句里:

    <!--插入单条数据-->
   <insert id="insertPerson" parameterType="mybatis.model.Person"  useGeneratedKeys="true"  >
       INSERT INTO person
       (id,create_at,update_at,name,age,sex,pro,tell,qq,email,stu_num,waikey)
       values
       (#{id},#{create_at},#{update_at},#{name},#{age},#{sex},#{pro},#{tell},#{qq},#{email},#{stu_num},#{waikey})
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
<!--             select LAST_INSERT_ID() -->
           select @@IDENTITY AS ID
</selectKey>
</insert>


2.Data函数

java Data 时间接口 java.util.Date

已知的实现类:

Date,Time,TimeStamp

输出时间:

        DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
Calendar calendar = Calendar.getInstance();
//获取系统当前年份  
       int year=calendar.get(Calendar.YEAR);
//获取系统当前月份  
       int month = calendar.get(Calendar.MONTH) + 1;
//获取系统当然日期  
       int day = calendar.get(Calendar.DATE);
//获取系统当前小时  
       int hour = calendar.get(Calendar.HOUR);
//获取系统当然分钟  
       int minute = calendar.get(Calendar.MINUTE);
//获取系统当前秒数  
       int second = calendar.get(Calendar.SECOND);

//        获取毫秒数的时间戳 13
       System.out.print("\n" + date.getTime() + "\n");
//        获取当前时间
       System.out.print("\n" + df.format(date) + "\n");
//        转化时间戳

它们的输出分别为:

1523197610104

2018-04-08 22:26:50

2018-04-08 22:26:50


3.深度思考:

1.maven是什么,和Ant有什么区别?

       maven是一个面向项目,管理项目的框架工具,它管理jar包/配置xml,它的主要使命是为了使整个项目更加简洁,方便构建、管理。maven是以约定为主,有比较强的目的性,规定了目录结构统一管理。有更多的隐式规则,也内置了软件构建的生命周期。

       Ant也是一种build工具,是软件构建工具,更适合用来编译部署。构建规则相对maven更静态,规则不容易扩展,没有规定的目录结构。要自定义标签/配置文件,对于jar梗好的生成,方便构建。没有类似maven那样的管理方法。它是跨平台性的,使用纯java语言编写,操作简单。

2.clean,install,package,deploy分别代表什么含义?

       这是maven的命令

        clean是清除缓存,就是项目中的生成结果;package是打包当前项目到target文件夹下面;install是打包在本地仓库中,生成(安装)pom和jar文件;deploy是打包到远程仓库,使其他人可以共享,需要配置pom文件。

3.怎么样能让Maven跳过JUnit?

       使用surefire插件的时候可以添加跳过:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.18</version>
<configuration>
<skipTests>true</skipTests>
<includes>
<include>/JunitTest.java</include>
</includes>
<excludes>
<exclude>/JunitCon.java</exclude>
</excludes>
</configuration>
</plugin>

       或者打包配置的时候设置Command line :install -DskipTests

        或者在命令行 mvn install -DskipTests    mvn install -Dmaven.test.skip=true

4.为什么要用Log4j来替代System.out.println?

       Log4j输出的方式更加命中要点,精确,并且覆盖范围广。



明天计划的事情:


1.学习java/sql基础(Data类型和sqlData类型/ mysql自动生成时间 / data的转换)


2.继续完善当前项目(jdbc和jdbcTemplate和Mybatis)(表的修改)


遇到的问题和收获:


1.通过spring的update和batchUpdate方法操作数据库,单条操作获取返回值。和mybatis还有基础的jdbc的对比。


2.深度思考和Data函数。


3.mysql中高级函数的用法,还在学习





返回列表 返回列表
评论

    分享到