新建数据库my_db,新建表student_tb

id为主键,不自动递增。

不必插入数据。


下载MyBatis

https://github.com/mybatis/mybatis-3/releases

解压。


新建Java项目,什么都不用勾选(如果要在IDEA中操作数据库,可勾选SQL Support)。

勾选后,IDEA右侧会有一个Database的工具,可在IDEA中直接操作数据库。


导入mybatis所有的jar包、数据库驱动

mybatis.jar是必需的。

lib是mybatis依赖的第三方jar包,根据需要选择,嫌麻烦或者小白,可全部导入lib中的jar。

pdf是mybatis的文档。


设置MyBatis的日志

在src下新建文件 log4j.properties ,内容如下:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout,D # MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE # Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# log4j.appender.stdout.Threshold = ERROR
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n # File output...
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/log.txt
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.D.encoding=UTF-8

可到 mybatis.pdf   8.1.1.2小节复制来修改。

这个配置会在控制台输出DEBUG级的日志,我们可以看到程序的执行过程,如果觉得打印的东西太多看着烦,可以把红色部分的#去掉,这样只打印错误信息。

log4j的配置可参考:

https://www.cnblogs.com/chy18883701161/p/12117192.html


src下新建包com.chy.pojo,包下新建POJO类Student:

package com.chy.pojo;

public class Student {
private Integer id;
private String name;
private Integer age;
private Integer score; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Integer getScore() {
return score;
} public void setScore(Integer score) {
this.score = score;
} @Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
 
POJO(Plain Ordinary Java Object)简单的Java对象,属性及其getter、setter方法,开发时t可以加oString()便于调试。
PO,Persistent Object,持久层对象,对应数据表,即数据表的映射,po也算是pojo。
pojo、po的包名也常使用model、domain。
 
VO ,value object,值对象,一般是在po、pojo的基础上进行扩展,封装数据进行传输或者接受前台传递的数据
DTO(Data Transform Object)  数据传输对象,可以把po、pojo、vo作为dto。
 
pojo类的基本类型的成员变量,尽量使用包装类型。

src下新建包com.chy.mapper,mapper下创建实体-数据表的映射文件  StudentMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.chy.mapper.StudentMapper">
<insert id="insertStudent" parameterType="com.chy.pojo.Student">
INSERT INTO student_tb(id,name,age,score)VALUES (#{id},#{name},#{age},#{score})
</insert> <select id="queryById" parameterType="Integer" resultType="com.chy.pojo.Student">
SELECT * FROM student_tb WHERE id=#{id}
</select> <update id="updateStudent" parameterType="com.chy.pojo.Student">
UPDATE student_tb SET name=#{name},age=#{age},score=#{score} WHERE id=#{id}
</update> <delete id="deleteStudent" parameterType="Integer">
DELETE FROM student_tb WHERE id=#{id}
</delete>
</mapper>

可以到mybatis.pdf  2.1.5小节复制来修改。

我们把映射文件都放在mapper包下,映射文件常以 实体类名+Mapper 命名。

<mapper>的namespace常设置为  包名.映射文件名。

通过namepace和id调用相应的sql语句,这两者组合起来要唯一。

parameterType指定参数类型,resultType指定要把查询结果映射到哪种数据类型。如果数据类型是pojo类,尽量写全限定类名,这样Ctrl+B可以转到定义处。

映射文件的写法可参考:

https://www.cnblogs.com/chy18883701161/p/12122079.html


src下新建数据库配置文件mysql.properties:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
username=chy
password=abcd

对应信息要换为自己的。

src下新建mybatis的核心(全局)配置文件mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--指定数据库配置文件的位置-->
<properties resource="mysql.properties"></properties> <!--指定日志实现使用的是log4j-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings> <!--指定实体类-->
<typeAliases>
<typeAlias type="com.chy.pojo.Student" alias="Student"/>
</typeAliases> <!--指定数据库配置文件中的变量名-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <!--指定映射文件的位置-->
<mappers>
<mapper resource="com/chy/mapper/StudentMapper.xml"/>
</mappers>
<!-- Continue going here --> </configuration>

可到mybatis.pdf  2.1.2小节复制来改。

<configuration>的子元素是有一定顺序的,顺序不对会报红。

mybatis全局配置文件的写法可参考:

https://www.cnblogs.com/chy18883701161/p/12120023.html


src下新建包com.chy.test,包下新建测试类Test:

package com.chy.test;

import com.chy.pojo.Student;
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 java.io.IOException;
import java.io.Reader; public class Test {
public static void main(String[] args) throws IOException {
//加载mybatis的全局配置文件
String resources="mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resources); //根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//通过SqlSessionFactory创建SqlSession
SqlSession sqlSession=sqlSessionFactory.openSession(); //增
Student student = new Student();
student.setId(1);
student.setName("chy");
//第一个参数对应映射文件中的namespace+id,通过namespace+id调用相应的sql语句,第二个参数是传给sql语句的参数
sqlSession.insert("com.chy.mapper.StudentMapper.insertStudent", student); //修改数据库(增、删、改)后,需要commit()提交给数据库,才会同步本次会话做的修改。只有查询的,可以不commit()。
sqlSession.commit();
//关闭会话
sqlSession.close();
}
}
     //改
Student student = new Student();
student.setId(1);
student.setName("chenghongyong");
sqlSession.update("updateStudent", student);
        //查
Student student=sqlSession.selectOne("queryById", 1);
System.out.println(student);

如果本次session期间,只有查询,可以不用commit()。

        //删
sqlSession.delete("deleteStudent", 1);

可参考:https://www.cnblogs.com/chy18883701161/p/12150758.html


说明

(1)版本声明部分,最好不要复制其他人的,如果你和ta用的mybatis库版本不同,会出错。最好到mybatis.pdf中去复制。

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

(2)配置文件的文件名问题

log4j.properties这个文件名是约定的,不能自己取。

映射文件、数据库配置文件需要在mybatis全局配置文件中指定,它们的文件名可以自己取。

mybatis全局配置文件要在程序中指定,文件名可以自己取。

(3)配置文件的位置问题

配置文件必须放在资源根目录下。常见的做法有2种:

  • 在项目的根目录下新建文件夹resource,右键标识为资源根目录

注意是Resource Root,不是Source Root。

在里面放配置文件:

  • 也可以像demo中一样放置在src下,因为src就是默认的资源根目录。

mapper中的映射文件放哪儿都行,只要路径配置对得上就ok。

log4j.properties必须直接放在资源根目录下(不能放在子文件夹里)。

MyBatis 入门Demo的更多相关文章

  1. Mybatis入门Demo(单表的增删改查)

    1.Mybatis 什么是Mybatis: mybatis是一个持久层框架,用java编写的 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动.创建连接等繁杂过程 ...

  2. Mybatis入门DEMO

    下面将通过以下步骤说明如何使用MyBatis开发一个简单的DEMO: 步骤一:新建表STUDENTS 字段有: Stu_Id.Stu_Name.Stu_Age.Stu_Birthday CREATE ...

  3. 最基础的mybatis入门demo

    demo结构 数据库情况 (不会转sql语句 骚瑞) 数据库连接信息 jdbc.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:m ...

  4. Mybatis入门和简单Demo

    一.Mybatis的诞生 回顾下传统的数据库开发,JDBC和Hibernate是使用最普遍的技术,但这两种ORM框架都存在一定的局限性: JDBC:最原生的技术,简单易学,执行速度快,效率高,适合大数 ...

  5. 【SSH系列】初识spring+入门demo

    学习过了hibernate,也就是冬天,经过一个冬天的冬眠,当春风吹绿大地,万物复苏,我们迎来了spring,在前面的一系列博文中,小编介绍hibernate的相关知识,接下来的博文中,小编将继续介绍 ...

  6. netty入门demo(一)

    目录 前言 正文 代码部分 服务端 客服端 测试结果一: 解决粘包,拆包的问题 总结 前言 最近做一个项目: 大概需求: 多个温度传感器不断向java服务发送温度数据,该传感器采用socket发送数据 ...

  7. SpringBoot 入门 Demo

    SpringBoot   入门 Demo Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从 ...

  8. 写给新手看的 MyBatis 入门

    目录 MyBatis 使用前的准备 什么是 MyBatis 使用Maven 进行 MyBatis 开发环境搭建 MyBatis 入门 项目整体结构一览 MyBatis 的简单生命周期 1.获取 Sql ...

  9. springboot + mybatisPlus 入门实例 入门demo

    springboot + mybatisPlus 入门实例 入门demo 使用mybatisPlus的优势 集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用ma ...

随机推荐

  1. Flutter 中的表单

    一.Flutter 常用表单介绍   Flutter 中常见的表单有 TextField 单行文本框,TextField 多行文本框.CheckBox.Radio.Switch  CheckboxLi ...

  2. 【Vue路由系统详述】

    目录 路由命名 路由参数 路由参数的实现原理 子路由 子路由之append 动态绑定属性 子路由之append升级版 子路由之非append 路由重定向 手动路由 路由钩子 在路径中去掉"# ...

  3. 论STA | SOCV / POCV 之 variation (2)

    芯片制造涉及到许多复杂重复的过程,如:光刻.蚀刻.离子注入.扩散.退火.而且都是原子级操作,尽管控制非常严格,但偏差不可避免. 工艺偏差会导致芯片物理参数偏差,如:线宽.沟道掺杂浓度.线厚.临界尺寸. ...

  4. Python学习之Craps赌博游戏篇

    在此先安利一波大佬的Python学习项目地址:https://github.com/jackfrued/Python-100-Days 这些天一直在看着大佬的项目学习Python,这是第五天循环学习完 ...

  5. 【网搜】禁止 number 输入非数字(Android仍有问题)

    目的:使用 number 表单,让其只可输入数字. 问题:ios 可正常限制,Android 仍可输入  [ e | . |  - |  + ]   这4个字符.猜测这4个字符在数值中为科学记数.小数 ...

  6. 用Python给头像加上圣诞帽或圣诞老人小徽章

    随着圣诞的到来,想给给自己的头像加上一顶圣诞帽.如果不是头像,就加一个圣诞老人陪伴. 用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章: https://zhuanlan.zh ...

  7. java篇 之 静态

    Final:不可改变 Static:静态修饰符,在编译阶段就能确定了,可以修饰成员变量,相应的称之为静态变量 是一个共享的变量(被这个类和这个类所产生的对象所共享的,他是唯一的,出生时间 为类第一次产 ...

  8. 2020年英特尔CPU供应短缺将持续

    导读 有着相当靠谱的爆料历史的台媒 DigiTimes 报道称,其预计英特尔的 CPU 供应短缺问题,将持续到 2020 年末.对于这样的预测,我们其实早已见怪不怪,毕竟该公司首席执行官 Bob Sw ...

  9. rsyslog日志服务部署

    rsyslog简介 rsyslog是CentOS6和CentOS7默认的记录日志的服务 支持特性: UDP, TCP, SSL, TLS, RELP MySQL, PGSQL, Oracle实现日志存 ...

  10. package.json中的script选项作用

    npm不仅可以用于模块管理,还可以用于执行脚本.package.json文件有一个scripts字段,可以用于指定脚本命令,供npm直接调用. 接下来做个简单测试: (1)在项目根目录下创建demo. ...