0x00前言

我前面使用的jdbc和jdbc的工具类集成的但是它们在少部分代码的情况下会会简单,但是以后如果项目较大jdbc的固定代码会很难维护,如果使用框架会简单很多,也标志着java学习正式进入到框架阶段

0x01配置MyBaits

0x1创建模块,导入坐标

在maven的配置文件中pom.xml中加入所需要的jar包

<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>

0x2配置数据库连接文件

修改自己的数据库地址和密码;

<?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>
<!-- 别名-->
<typeAliases>
<package name="com.it.pojo"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED"> <!-- 数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/tese"/>
<property name="username" value="root"/>
<property name="password" value="zhonglin"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>

0x3编写sql映射文件

这个文件存在的意义是为了以后的开发,查询那个表那个表的语句就写一个这样的映射表,方便管理和维护

<?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="test"> <select id="findAll" resultType="com.test.domain.User">
select * from user;
</select> </mapper>

在数据库配置文件中要加入,文件名就是你的sql映射文件

<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>

0x02入门使用

0x1定义实体类

实体类的内容为你数据库查询的内容

public class User {
private String name;
private String password;
private String gender;
private int id;
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", id=" + id +
'}';
}

0x2基础使用

  1. 加载核心配置文件

  2. 获取sqlSession对象,执行SQL语句

  3. 释放资源

    public class demo1 {
    public static void main(String[] args) throws IOException {
    //1.加载mybatis配置文件,获取SqlSessionFactory,sql语句工厂
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");//输出流获取配置文件地址
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//获取bulid对象然后获取Factory对象
    SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
    SqlSession sqlSession = build.openSession();
    List<User> users = sqlSession.selectList("test.findAll");//通过sql语句的映射文件去查询
    System.out.println(users);
    sqlSession.close();
    }
    }

0x03代理开发

0x1配置映射文件和接口

定义sql映射文件相同名字的Mapper文件,且文件路径要一致,就是要在同一个文件夹下面

UserMapper文件:

public interface UserMapper {
List<User> findAll();
}

映射文件是在resources下面的所以我们要给它新的一个文件夹他的命名方式是com/test而接口的命名方式是com.test这点是要注意的,随后需要修改

0x2配置核心文件

<mappers>
<mapper resource="com/test/UserMapper.xml"/>
</mappers>

需要把在mybatis-config中的映射声明改成新的文件路径

0x3使用Mapper开发

  1. 还是先获取配置文件,然后用sqlSession对象获取userMapper.class文件,mapper就是UserMapper的代理对象了
  2. 用代理对象去实现UserMapper中的方法
public class demo2 {
public static void main(String[] args) throws IOException {
//1.加载mybatis配置文件,获取SqlSessionFactory,sql语句工厂
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
SqlSession sqlSession = build.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> all = mapper.findAll();
System.out.println(all);

0x04MyBatis的增删改查

0x1条件查询

如果是对同一个表进行的操作就写在一个接口里面

public interface UserMapper {
List<User> findAll();
User selectbyID(int id);
}

在对于的xml文件里面写入对应的sql语句

<mapper namespace="com.test.domain.com.test.UserMapper">

    <select id="findAll" resultType="com.test.domain.User">
select * from user;
</select>
<select id="selectbyID" resultType="com.test.domain.User">
select * from user where id =#{id}
</select> </mapper>

还是用代理的方式进行开发和查询

public class dmo3 {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
SqlSession sqlSession = build.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectbyID(5);
System.out.println(user);
sqlSession.close();
}
}

0x2resultMap标签

<resultMap id="paswwrod" type="com.test.domain.User">
<result column="paswword" property="password"></result>
</resultMap>

这个标签的作用可以用于当你的pojo(实体)对象的属性和你的数据的表明对不上的时候可以做一个属性的映射

  • id=唯一表示符合
  • type=pojo对象
  • property:实体类的属性名

0x3增删改查

学习完这些基础的以后剩下的就是sql代码的问题了列如;模糊查询应该怎么做

1.在对应表的接口写出方法

public interface UserMapper {
List<User> findlike(String name);
}

写出对于的sql语句,模糊查询select *(需要的属性名) from user(对应的表名) where name like #{name}(条件)

<select id="findlike" resultMap="paswwrod">
select * from user where name like #{mame}
</select>

对应的删除方法

public interface UserMapper {
void delById(int id );
}
<delete id="delById">
delete * from user where id=#{id}
</delete>

对应修改方法

void updateId(User user);
<update id="updateId">
UPDATE user set
name =#{name},
gender=#{gender},
password=#{password}
where id=#{id} </update>
public static void main(String[] args) throws IOException {
User user = new User();
user.setGender("男");
user.setName("小小");
user.setPassword("123452");
user.setId(14);
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
SqlSession sqlSession = build.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateId(user);

对应修改方法

void add(User user);
<insert id="add">
insert into user (name,password,gender)
values (#{name},#{password},#{gender})
</insert>
public static void main(String[] args) throws IOException {
User user = new User();
user.setPassword("root");
user.setName("hellopw");
user.setGender("女");
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
SqlSession sqlSession = build.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.add(user);
sqlSession.close();

#0x05总结

其实现在的MyBatis还有一些负责当它和spring一起使用的时候会更简单,需要记住的是sql语句的语法。

java学习之MybBaits的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  4. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  5. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  6. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  7. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

随机推荐

  1. ARC120F Wine Thief (组合数学)

    题面 有一个长为 N N N 的序列,相邻的两个数中只能选一个,总共选 k k k 个数,一种方案的价值为选的 k k k 个数的和,问所有合法方案的价值总和,答案对 998244353 取模. 1 ...

  2. PHP一句话简单免杀

    PHP一句话简单免杀 原型 几种已经开源的免杀思路 拆解合并 <?php $ch = explode(".","hello.ev.world.a.l"); ...

  3. 「学习笔记」单调队列优化dp

    目录 算法 例题 最大子段和 题意 思路 代码 修剪草坪 题意 思路 代码 瑰丽华尔兹 题意 思路 代码 股票交易 题意 思路 代码 算法 使用单调队列优化dp 废话 对与一些dp的转移方程,我们可以 ...

  4. 使用VS Code 搭建 platformio 平台

    一.需要的资源网站 arduino GitHub:https://github.com/arduino espressif GitHub:https://github.com/espressif pl ...

  5. C/C++ Capstone 引擎源码编译

    Capstone 是一个轻量级的多平台.多架构的反汇编框架.Capstone 旨在成为安全社区中二进制分析和反汇编的终极反汇编引擎.Capstone的编译非常简单只需要一步即可轻松得到对应的Lib库文 ...

  6. 洛谷P7112 行列式求值

    行列式求值 这是一个让你掉头发的模板题 行列式的定义 行列式 (\(\texttt{Determinant}\)) 是一个函数定义,取值是一个标量. 对一个 \(n\times n\) 的矩阵 \(A ...

  7. 进阶:spring-bean生命周期流程

    Bean的生成过程 主要流程图 1. 生成BeanDefinition Spring启动的时候会进行扫描,会先调用org.springframework.context.annotation.Clas ...

  8. [Python]-pdb模块-单步调试

    使用pdb模块辅助python调试. import pdb 断点模式 在需要调试的语句前设置断点,加入这行代码: pdb.set_trace() 程序运行到这就会进入断点调试模式. 输入 作用 n 运 ...

  9. IK分词器实现原理剖析 —— 一个小问题引发的思考

    前言: 网上很多的文章都建议在使用IK分词器的时候,建立索引的时候使用ik_max_word模式:搜索的时候使用ik_smart模式.理由是max_word模式分词的结果会包含smart分词的结果,这 ...

  10. Windows Powershell 对于布尔值的处理

    Windows PowerShell中有很多场景需要输入0或者1作为命令的参数.Powershell对于布尔值的逻辑处理究竟是怎样的呢?除了最常用的$True, $False, 1, 0.对于要求输入 ...