Java之MyBatis【IDEA版】(一篇文章精通系列)增删改查【注解开发】 - 所有知识点(大全)

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;

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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

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获取)

img

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页,需要的话可以点赞+关注
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

/***********************基本描述**********************************/ 0、根据表可以单独生成javaBean后缀可以自定义 1、工具本身是非常简单的,每个人都能做就是使用模板替换生成相应文件 2、工具主要针对SpringMvc+Mybatis注解+Mysql生成对象,dao、sqlDao、interface、实现接口 3、根据表生成Excel 4、生成成功后倒入到自己对应的项目中,然后Ctrl+Shipt+O(Eclipse快速倒入包)实现 5、里面因为运用的是注解,所以很多包我就没有提供了因为这些都是很基础的东西,不会的同学可以去网上查看搭建Mybatis注解 6、生成了些什么,具体主要是对单表的增、删、改、查(分页) /********************************/ /********************************/ /*************完全免费***********/ /********************************/ /********************************/ 如果大家喜欢可以再给我提其他功能,有时间我加上 /*********************************************************************************/ 模板介绍: MySql.Data.dll :连接Mysql基本dl我们的的驱动。 foxjava.exe :直接运行程序 xml : Excel文件夹 ##### TemplateXml.xml 根据数据库对应表生成字段描述,生成后最好用WPS打开,然后重新另存为office认识的Excel template : 文件生成模板(非常重要的不能修改) ##### BasePojo.template 所有基础表对象都要继承,方便序列化(系统自动生成) ##### Pager.template 分页对象 (系统自动生成) ##### dao.template 数据库接口Dao(mybatis接口方式,在方法上写sql,复杂的使用sqlProvider) ##### daoSqlProvider.template 复杂sql提供者 ##### service.template 对外开放的接口 ##### serviceImpl.template 实现开放接口,基本数据操作逻辑 /*********************************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值