Java之MyBatis【IDEA版】(一篇文章精通系列)增删改查【注解开发

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

cn.itbluebox

mybatis

1.0.0-SNAPSHOT

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

在这里插入图片描述

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>

(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;

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

使用注解配置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;

Docker步步实践

目录文档:

[外链图片转存中…(img-pzR0tkXW-1714338139941)]

[外链图片转存中…(img-rib9nsRD-1714338139942)]

①Docker简介

②基本概念

③安装Docker

[外链图片转存中…(img-naEPKw9G-1714338139942)]

④使用镜像:

[外链图片转存中…(img-4eUXz3om-1714338139942)]

⑤操作容器:

[外链图片转存中…(img-ewAdwwLK-1714338139943)]

⑥访问仓库:

[外链图片转存中…(img-yShXSsF6-1714338139943)]

⑦数据管理:

[外链图片转存中…(img-UiLuFqB2-1714338139943)]

⑧使用网络:

[外链图片转存中…(img-4tPt7eSE-1714338139944)]

⑨高级网络配置:

[外链图片转存中…(img-yK0PTa6z-1714338139944)]

⑩安全:

[外链图片转存中…(img-3mAFyDRh-1714338139944)]

⑪底层实现:

[外链图片转存中…(img-CaEaz0tg-1714338139945)]

⑫其他项目:

[外链图片转存中…(img-BfsCNdw8-1714338139945)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值