MyBatis入门

文章介绍了如何使用Mybatis进行数据库操作,包括JDBC连接配置、Java代码生成器的使用,以及如何在实际项目中实现增删改查。此外,还提到作者分享的Java开发学习资料和MySQL性能调优手册,旨在帮助开发者提升技能和解决问题。

<jdbcConnection driverClass=“${jdbc.driver}”

connectionURL=“ j d b c . u r l " u s e r I d = " {jdbc.url}" userId=" jdbc.url"userId="{jdbc.username}” password=“${jdbc.password}”/>

<javaModelGenerator targetPackage=“com.lv.model”

targetProject=“src/main/java”>

<sqlMapGenerator targetPackage=“com.lv.mapper”

targetProject=“src/main/java”>

<javaClientGenerator targetPackage=“com.lv.mapper”

targetProject=“src/main/java” type=“XMLMAPPER”>

enableCountByExample=“false” enableDeleteByExample=“false”

enableSelectByExample=“false” enableUpdateByExample=“false”>

2、配置maven插件命令:配置maven运行generator命令

选择配置:

添加配置:

3、在pom中处理generatorConfig.xml

右键运行:

三、Mybatis增删改查案例


新建一个软件包util,将sessionUtil文件移入:

package com.javaxl.util;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**

  • @author 小李飞刀

  • @site www.javaxl.com

  • @company xxx公司

  • @create 2018-12-10 21:59

*/

public class SessionUtil {

private static SqlSessionFactory sessionFactory;

private static ThreadLocal threadLocal = new ThreadLocal();

static {

sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream(“/mybatis.cfg.xml”));

}

public static SqlSession openSession() {

SqlSession session = threadLocal.get();

if (null == session) {

session = sessionFactory.openSession();

threadLocal.set(session);

}

return session;

}

public static void main(String[] args) {

SqlSession session = openSession();

System.out.println(session.getConnection());

session.close();

// System.out.println(session.getConnection());

}

}

新建service类:

BookService:

package com.lv.service;

import com.lv.model.Book;

public interface BookService {

int deleteByPrimaryKey(Integer bid);

int insert(Book record);

int insertSelective(Book record);

Book selectByPrimaryKey(Integer bid);

int updateByPrimaryKeySelective(Book record);

int updateByPrimaryKey(Book record);

}

接着在文件内按Alt+Enter去实现接口:

确定实现这些方法:

按住Alt+Insert生成set与get方法:

BookServiceImpl:

package com.lv.service.impl;

import com.lv.model.Book;

import com.lv.service.BookService;

public class BookServiceImpl implements BookService {

private BookMapper bookMapper;

public BookMapper getBookMapper() {

return bookMapper;

}

public void setBookMapper(BookMapper bookMapper) {

this.bookMapper = bookMapper;

}

@Override

public int deleteByPrimaryKey(Integer bid) {

return bookMapper.deleteByPrimaryKey(bid);

}

@Override

public int insert(Book record) {

return bookMapper.insert(record);

}

@Override

public int insertSelective(Book record) {

return bookMapper.insertSelective(record);

}

@Override

public Book selectByPrimaryKey(Integer bid) {

return bookMapper.selectByPrimaryKey(record);

}

@Override

public int updateByPrimaryKeySelective(Book record) {

return bookMapper.updateByPrimaryKeySelective(record);

}

@Override

public int updateByPrimaryKey(Book record) {

return bookMapper.updateByPrimaryKey(record);

}

}

测试:Alt+Enter创建测试,将需要测试的方法进行勾选

BookServiceImplTest:

package com.lv.service.impl;

import com.lv.mapper.BookMapper;

import com.lv.service.BookService;

import org.apache.ibatis.session.SqlSession;

import util.SessionUtil;

public class BookServiceImplTest{

private BookService bookService;

private SqlSession sqlSession;

public void setUp() throws Exception {

System.out.println(“调用方法前使用”);

BookServiceImpl bookService=new BookServiceImpl();

SqlSession sqlSession= SessionUtil.openSession();

System.out.println(bookService.getBookMapper());

BookMapper mapper=sqlSession.getMapper(BookMapper.class);

bookService.setBookMapper(mapper);

this.bookService=bookService;

}

public void tearDown() throws Exception {

System.out.println(“调用方法后执行”);

}

public void testDeleteByPrimaryKey() {

System.out.println(“业务方法”);

}

public void testSelectByPrimaryKey() {

}

}

执行方法:

mybatis.cfg.xml文件:

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

<property name=“driver”

value=“${jdbc.driver}”/>

<property name=“url”

value=“${jdbc.url}”/>

Book.java:

package com.lv.model;

public class Book {

private Integer bid;

private String bname;

private Float price;

public Book(Integer bid, String bname, Float price) {

this.bid = bid;

this.bname = bname;

this.price = price;

}

public Book() {

super();

}

public Integer getBid() {

return bid;

}

public void setBid(Integer bid) {

this.bid = bid;

}

public String getBname() {

return bname;

}

public void setBname(String bname) {

this.bname = bname;

}

public Float getPrice() {

return price;

}

public void setPrice(Float price) {

this.price = price;

}

@Override

public String toString() {

return “Book{” +

“bid=” + bid +

“, bname='” + bname + ‘’’ +

“, price=” + price +

‘}’;

}

}

log4j2.xml文件:

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

/root/workspace/lucenedemo/logs

/root/workspace/lucenedemo/logs/error

/root/workspace/lucenedemo/logs/warn

%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n

<ThresholdFilter level=“trace” onMatch=“ACCEPT”

onMismatch=“DENY” />

<PatternLayout

pattern=“%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n” />

<RollingFile name=“RollingFileInfo” fileName=“${LOG_HOME}/info.log”

filePattern=“ L O G H O M E / {LOG_HOME}/ LOGHOME/${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log”>

<ThresholdFilter level=“info” onMatch=“ACCEPT”

onMismatch=“DENY” />

<PatternLayout

pattern=“%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n” />

<TimeBasedTriggeringPolicy interval=“1”

modulate=“true” />

<RollingFile name=“RollingFileWarn” fileName=“${WARN_LOG_FILE_NAME}/warn.log”

filePattern=“ W A R N L O G F I L E N A M E / {WARN_LOG_FILE_NAME}/ WARNLOGFILENAME/${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log”>

<ThresholdFilter level=“warn” onMatch=“ACCEPT”

onMismatch=“DENY” />

<PatternLayout

pattern=“%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n” />

<RollingFile name=“RollingFileError” fileName=“${ERROR_LOG_FILE_NAME}/error.log”

filePattern=“ E R R O R L O G F I L E N A M E / {ERROR_LOG_FILE_NAME}/ ERRORLOGFILENAME/${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log”>

<ThresholdFilter level=“error” onMatch=“ACCEPT”

onMismatch=“DENY” />

<PatternLayout

pattern=“%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n” />

<TimeBasedTriggeringPolicy interval=“1”

modulate=“true” />

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

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

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

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

img

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-wrNml84x-1711794898104)]

[外链图片转存中…(img-Q6gzYnDZ-1711794898104)]

[外链图片转存中…(img-nQ4Xy2xr-1711794898104)]

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

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

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

img

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

[外链图片转存中…(img-SZYSJDEn-1711794898105)]

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值