mysql
mysql-connector-java
5.1.32
org.mybatis
mybatis
3.4.6
junit
junit
4.12
log4j
log4j
1.2.17
(4)创建相关配置文件
- jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test2
jdbc.username=root
jdbc.password=root
- log4j.properties
direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
direct messages to file mylog.log
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
set log levels - for more verbose logging change ‘info’ to ‘debug’
log4j.rootLogger=debug, stdout
- sqlMapConfig.xml
(5)创建包结构
(6)创建实体类
- Order
package cn.itbluebox.domain;
import java.util.Date;
public class Order {
private int id;
private Date ordertime;
private double total;
public Order() {
}
public Order(int id, Date ordertime, double total) {
this.id = id;
this.ordertime = ordertime;
this.total = total;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getOrdertime() {
return ordertime;
}
public void setOrdertime(Date ordertime) {
this.ordertime = ordertime;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
@Override
public String toString() {
return “Order{” +
“id=” + id +
“, ordertime=” + ordertime +
“, total=” + total +
‘}’;
}
}
- Role
package cn.itbluebox.domain;
public class Role {
private int id;
private String roleName;
private String roleDesc;
public Role() {
}
public Role(int id, String roleName, String roleDesc) {
this.id = id;
this.roleName = roleName;
this.roleDesc = roleDesc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
@Override
public String toString() {
return “Role{” +
“id=” + id +
“, roleName='” + roleName + ‘’’ +
“, roleDesc='” + roleDesc + ‘’’ +
‘}’;
}
}
- User
package cn.itbluebox.domain;
import java.util.Date;
import java.util.List;
public class User {
private int id;
private String username;
private String password;
private Date birthday;
private List roleList;
public User() {
}
public User(int id, String username, String password, Date birthday, List roleList) {
this.id = id;
this.username = username;
this.password = password;
this.birthday = birthday;
this.roleList = roleList;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public List getRoleList() {
return roleList;
}
public void setRoleList(List roleList) {
this.roleList = roleList;
}
@Override
public String toString() {
return “User{” +
“id=” + id +
“, username='” + username + ‘’’ +
“, password='” + password + ‘’’ +
“, birthday=” + birthday +
“, roleList=” + roleList +
‘}’;
}
}
- 修改Order
package cn.itbluebox.domain;
import java.util.Date;
public class Order {
private int id;
private Date ordertime;
private double total;
//当前订单属于哪一个用户
private User user;
public Order() {
}
public Order(int id, Date ordertime, double total, User user) {
this.id = id;
this.ordertime = ordertime;
this.total = total;
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getOrdertime() {
return ordertime;
}
public void setOrdertime(Date ordertime) {
this.ordertime = ordertime;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return “Order{” +
“id=” + id +
“, ordertime=” + ordertime +
“, total=” + total +
“, user=” + user +
‘}’;
}
}
2、引入处理时间的类MyDateTypeHandler ,
因为数据库当中的时间使用的是long类型的数据,如果您使用的datetime则不需要
- 创建MyDateTypeHandler
package cn.itbluebox.handler;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
public class MyDateTypeHandler extends BaseTypeHandler {
//将Java 类型转换为数据库需要的类型
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
long time = date.getTime();
preparedStatement.setLong(i,time);
}
//将数据中的类型 转换为java类型
//String 类型 要转换的字段名称
//ResultSet 查询出的结果集
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
//获得结果集中需要的数据(long)转换为Date
long aLong = resultSet.getLong(s);
Date date = new Date(aLong);
return date;
}
//将数据库当中的类型 转换为Java的类型
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
long aLong = resultSet.getLong(i);
Date date = new Date(aLong);
return date;
}
//将数据库中的类型 转换为Java类型
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long aLong = callableStatement.getLong(i);
Date date = new Date(aLong);
return date;
}
}
- typeHandlers标签
3、注解替代的映射文件,所以我们只需要加载使用了注解的Mapper接口即可
在上面的配置文件当中以及配置好了,在这里只做简单的说明
4、User的增删改查注解使用
4.1 增加
(1)创建UserMapper
实现添加User的代码
package cn.itbluebox.mapper;
import cn.itbluebox.domain.User;
import org.apache.ibatis.annotations.Insert;
public interface UserMapper {
@Insert(“insert into user values(#{id},#{username},#{password},#{birthday})”)
public void save(User user);
}
(2)创建MyBatisTestUser的测试类
package cn.itbluebox;
import cn.itbluebox.domain.User;
import cn.itbluebox.mapper.UserMapper;
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.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
public class MyBatisTestUser {
/*
@Before方法生成一个对象,然后在@Test里调用。
*/
private UserMapper usermapper;
@Before
public void before() throws IOException{
InputStream resourceAsStream = Resources.getResourceAsStream(“sqlMapConfig.xml”);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
usermapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void testAdd(){
User user = new User();
user.setUsername(“测试数据”);
user.setPassword(“123”);
user.setBirthday(new Date());
usermapper.save(user);
}
}
运行测试
插入成功
4.2 修改
(1)在UserMapper当中创建update
@Update(“update user set username=#{username},password=#{password} where id=#{id}”)
public void update(User user);
(2)在MyBatisTestUser的测试方法testUpdate
@Test
public void testUpdate() throws IOException{
User user = new User();
user.setId(1);
user.setUsername(“张三改”);
user.setPassword(“321”);
usermapper.update(user);
}
运行测试
修改成功
4.3 删除
(1)在UserMapper当中创建delete
@Delete(“delete from user where id = #{id}”)
public void delete(int id);
(2)在MyBatisTestUser的测试方法testDelete
@Test
public void testDelete() throws IOException{
usermapper.delete(1);
}
运行测试
(3)为了后面的演示正常我们在插入id为1的数据字段
@Test
public void testAdd(){
User user = new User();
user.setId(1);
user.setUsername(“莎莎”);
user.setPassword(“123”);
user.setBirthday(new Date());
usermapper.save(user);
}
运行测试
4.4 查询一个
(1)在UserMapper当中创建findById
@Select(“select * from user where id = #{id}”)
public User findById(int id);
(2)在MyBatisTestUser的测试方法testFindById
@Test
public void testFindById() throws IOException{
User user = usermapper.findById(1);
System.out.println(user);
}
运行测试
4.5 查询所有
(1)在UserMapper当中创建findAll
@Select(“select * from user”)
public List findAll();
(2)在MyBatisTestUser的测试方法testFindAll
@Test
public void testFindAll() throws IOException{
List users = usermapper.findAll();
for (User user : users) {
System.out.println(user);
}
}
运行测试
5、 一对一查询
(1)一对一查询的模型
用户表和订单表的关系为,一个用户有多个订单,
一个订单只从属于一个用户
一对一查询的需求:
查询一个订单,与此同时查询出该订单所属的用户
(2)一对一查询的语句
对应的sql语句:
select * from user u,order
o where u.id = o.uid
在这里使用的是Order当中的uid字段所以我们需要修改Order表添加uid字段
设置一些数据
user_order中间表暂时不用
(3)创建OrderMapper接口
使用注解配置Mapper,创建findAll方法
package cn.itbluebox.mapper;
import cn.itbluebox.domain.Order;
import cn.itbluebox.domain.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface OrderMapper {
@Select(“select * from order
”)
@Results({
@Result(id = true,property = “id”,column = “id”),
@Result(property = “ordertime”, column = “ordertime”),
@Result(property = “total”,column = “total”),
@Result(property = “user”,
column = “uid” ,
javaType = User.class,
one = @One(select = “cn.itbluebox.mapper.UserMapper.findById”))
})
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
2021年Java中高级面试必备知识点总结
在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。
本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。
目录:
(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
部分内容:
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ct = “cn.itbluebox.mapper.UserMapper.findById”))
})
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-bSjy7Xh8-1712602774175)]
[外链图片转存中…(img-qdRioMqp-1712602774175)]
[外链图片转存中…(img-ANBS3E2A-1712602774175)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
2021年Java中高级面试必备知识点总结
在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。
本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。
目录:
[外链图片转存中…(img-59q7eGGO-1712602774176)]
(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
[外链图片转存中…(img-03ovFWbg-1712602774176)]
部分内容:
[外链图片转存中…(img-4wGpXQKX-1712602774176)]
[外链图片转存中…(img-5kWitrob-1712602774176)]
[外链图片转存中…(img-hAtN1AAT-1712602774177)]
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!