发表于: 2016-10-14 00:21:36
16 2591
最近看spring boot ,中文文档较少,英文一般,卡住了,来试试修真院的任务
任务1:完成学员报名的DB设计并读写数据库立即学习
参考线上学员报名填写的资料,设计数据库,
数据库要有三个基本的字段,ID(自增Long),create_at,update_at(所有的时间都用Long)。
搭建本地JDK(7)和Maven(3)环境,使用Eclipse或者是Idea创建Maven项目。
编写Junit,使用Mybatis读写数据库。
单元测试通过。
准备工作:
1.开发环境:JDK8,Maven3,IDEA
2.任务分析: 参考学员报名填写的资料简单设计这么几个字段:
id(mediumint自增),username(varchar),qq(varchar),
预计入学时间forsee_day(date),修真类型career(varchar),毕业院校school(varchar),日报链接report_link(varchar),
立愿wish(varchar)
create_at(long),update_at(long)
任务开始:
1.建立数据库tb_barrier(意思就是为IT修真院建个数据库,不会翻译,barrier是关卡,障碍物的意思,寓意一下)
2.建立表结构如下:
CREATE TABLE tb_user (
id MEDIUMINT PRIMARY KEY AUTO_INCREMENT ,
qq VARCHAR(10),
career VARCHAR(10)
CHECK ('前端工程师''Android工程师''IOS工程师''Java工程师''运维工程师''产品经理''UI设计师'),
forsee_day VARCHAR(10),
school VARCHAR(25),
online_no INT,
report_link VARCHAR(50),
wish VARCHAR(100),
create_at LONG,
update_at LONG,
username VARCHAR(10)
);
建立两个触发器:
(1)在插入用户时为用户插入创建时间
CREATE TRIGGER bi_user
BEFORE INSERT
ON tb_user FOR EACH ROW
BEGIN
set NEW.create_at = sysdate();
END;
(2)在更新用户时插入更新时间
CREATE TRIGGER bu_user
BEFORE UPDATE
ON tb_user FOR EACH ROW
BEGIN
set NEW.update_at = sysdate();
END;
3.搞定Maven依赖,配置包结构,以及Mybatis配置文件
(1)Maven依赖:含Mybatis和数据库驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
(2)包结构
(3)配置文件MyBatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="environment">
<environment id="environment">
<!--配置JDBC-->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/it_barrier?characterEncoding =UTF-8" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<!--<mappers>-->
<!--<mapper class="dao.UserDao"/>-->
<!--</mappers>-->
</configuration>
4.开发User POJO
class User {
var id:Int = 0
var username: String = ""
var qq: String = ""
var career: String = ""
var foreseeDay: String = ""
var school:String = ""
var onlineNo: Int = 0
var reportLink: String = ""
var wish: String = ""
constructor()
constructor(username: String, qq: String, career: String, foreseeDay: String, school: String, onlineNo: Int, reportLink: String, wish: String) {
this.username = username
this.qq = qq
this.career = career
this.foreseeDay = foreseeDay
this.school = school
this.onlineNo = onlineNo
this.reportLink = reportLink
this.wish = wish
}
override fun toString(): String{
return "User(username='$username', qq='$qq', career='$career', foreseeDay='$foreseeDay', school='$school', onlineNo=$onlineNo, reportLink='$reportLink', wish='$wish')"
}
}
5.开发UserDao映射接口并在配置文件中配置Mapper(略去删除方法)
public interface UserDao {
//插入新用户并获取主键
@Insert("insert into tb_user (qq,career,foresee_day,school,online_no,report_link,wish,username)" +
"values(#{qq},#{career},#{foreseeDay},#{school},#{onlineNo},#{reportLink},#{wish},#{username})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int addUser(User user);
//更新用户数据,需要在上一层传入要更改字段
@Update("update tb_user set ${field} = #{value} where id = #{id}")
int updateUser(@Param("field") String field, @Param("value") String value, @Param("id") int id);
//按字段查询用户,按用户名查询,按qq查询
@Select("select * from tb_user where ${field} = #{value}")
@Results({
@Result(column = "foresee_day",property = "foreseeDay"),
@Result(column = "report_link",property = "reportLink"),
@Result(column = "online_no",property = "onlineNo")
})
User findUserBy(@Param("field") String field, @Param("value") String value);
//按id查询用户
@Select("select * from tb_user where id=#{id}")
@Results({
@Result(column = "foresee_day",property = "foreseeDay"),
@Result(column = "report_link",property = "reportLink"),
@Result(column = "online_no",property = "onlineNo")
})
User findUserById(int id);
//查找所有用户
@Select("select * from tb_user")
@Results({
@Result(column = "foresee_day",property = "foreseeDay"),
@Result(column = "report_link",property = "reportLink"),
@Result(column = "online_no",property = "onlineNo")
})
List<User> findAllUsers();
}
在配置文件中添加
<mappers>
<mapper class="dao.UserDao"/>
</mappers>
6.编写测试
public class TestUserDao {
@Test
public void testCURDUser() {
//获取sqlSession
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//获得Mybatis自动生成的接口实现
UserDao userDao = sqlSession.getMapper(UserDao.class);
//建立一个用户实例
User user = new User();
user.setUsername("杨百顺");
user.setQq("88888");
user.setCareer("Java工程师");
user.setForeseeDay("2016-09-01");
user.setSchool("南京耶鸡大学");
user.setOnlineNo(165);
user.setReportLink("http://user.report");
user.setWish("消灭人类暴政,世界属于三体");
//测试添加方法,通过
//testAddUser(userDao,user);
//测试更新方法,通过
//testUpdateUser(userDao,"qq","123456",7);
//测试查询单个用户方法,通过
User user1 = userDao.findUserBy("qq","123456");
System.out.println(user1);
//测试查询单个用户方法(通过id查询),通过
User user2 = userDao.findUserById(7);
System.out.println(user1);
//测试查询所有用户方法,通过
List<User> users = userDao.findAllUsers();
System.out.println(users);
//提交对数据库的操作
sqlSession.commit();
//关闭资源
sqlSession.close();
}
private void testUpdateUser(UserDao userDao,String filed, String value, int id) {
int res = userDao.updateUser(filed,value,id);
System.out.println("更新了"+res+"条数据");
}
public void testAddUser(UserDao userDao,User user) {
//向数据库中添加用户记录并打印是否成功
int res = userDao.addUser(user);
System.out.println("插入记录条数:"+res);
//获取到主键
System.out.println("该用户在数据库中唯一ID为:"+user.getId());
}
}
7.暂不git,收工(不git不能提交?git密码忘了。。。。随便写个地址给过吗?)写的太粗陋,求喷,有问题请指教,第一次写日报不太懂。
评论