发表于: 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中高级函数的用法,还在学习
评论