博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis-study
阅读量:3969 次
发布时间:2019-05-24

本文共 8598 字,大约阅读时间需要 28 分钟。

在这里插入图片描述

1.什么是Mybatis

  • MyBatis 是一款优秀的持久层框架
  • MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 映射成数据库中的记录
  • Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
  • GitHub : https://github.com/mybatis/mybatis-3
  • MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射

第一个Mybatis程序

思路:搭建环境–>导入Mybatis–>编写代码–>测试

1.搭建环境 和 编写实体类

CREATE DATABASE `mybatis`;USE `mybatis`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(20) NOT NULL,`name` varchar(30) DEFAULT NULL,`pwd` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert  into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');
package com.jsp.pojo;public class User {
private Integer id; private String name; private String pwd; public User() {
} public User(Integer id, String name, String pwd) {
this.id = id; this.name = name; this.pwd = pwd; } public Integer getId() {
return id; } public void setId(Integer id) {
this.id = id; } public String getname() {
return name; } public void setUsername(String name) {
this.name = name; } public String getPwd() {
return pwd; } public void setPwd(String pwd) {
this.pwd = pwd; } @Override public String toString() {
return "User{" + "id=" + id + ", username='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; }}

2.导入Mybatis相关依赖

//mybatis依赖
org.mybatis
mybatis
3.5.2
//数据库连接依赖
mysql
mysql-connector-java
5.1.47
//资源过滤
src/main/java
**/*.properties
**/*.xml
false
src/main/resources
**/*.properties
**/*.xml
false

3.编写Mybatis配置文件

4.编写Mybatis工具类

package com.jsp.utils;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.InputStream;public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory; static {
try {
String resource = "Mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) {
e.printStackTrace(); } } //获取SqlSession连接 public static SqlSession getSession(){
return sqlSessionFactory.openSession(); }}

5.编写Mapper接口

package com.jsp.dao;import com.jsp.pojo.User;import java.util.List;public interface UserMapper {
//查询所有用户 List
selectUser();}

6.编写Mapper.xml配置文件

7.Junit测试

package com.jsp.dao;import com.jsp.pojo.User;import com.jsp.utils.MybatisUtils;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.util.List;public class MyTest {
@Test public void selectUser() {
SqlSession sqlSession = MybatisUtils.getSession();// 方式一// UserMapper mapper = sqlSession.getMapper(UserMapper.class);// List
users = mapper.selectUser();// 方式二 List
users = sqlSession.selectList("com.jsp.dao.UserMapper.selectUser"); for (User user : users) {
System.out.println(user); } sqlSession.close(); }}

CRUD操作

  • 配置文件中namespace中的名称必须对应Mapper接口或者Dao接口的完整包名,必须一致!!!
  • <select id="selectUserByIdAndPassword" parameterType="map" resultType="user"> select * from user where name = #{name} and pwd = #{pwd} </select>
    • id : 接口中的方法名与映射文件中的sql语句id必须一致
    • parameterType : 参数类型
    • resultType : 结果集类型
  • 传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】
  • Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
//通过密码和名字查询用户User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);/*   */

万能的map

1.接口

User selectUserByNP2(Map
map);

2.sql语句

3.调用方法

Map
map = new HashMap
();map.put("username","小明");map.put("pwd","123456");User user = mapper.selectUserByNP2(map);

设置别名

ResultMap

  • 解决查询为null的问题 (属性名和字段名不一致)

注解开发

  • 使用注解开发就不需要Mapper.xml映射文件了
    1.在接口中添加注解
//查询全部用户@Select("select id,name,pwd password from user")public List
getAllUser();

2.在Mybatis-config.xml中绑定接口

3.测试

@Testpublic void testGetAllUser() {
SqlSession session = MybatisUtils.getSession(); //本质上利用了jvm的动态代理机制 UserMapper mapper = session.getMapper(UserMapper.class); List
users = mapper.getAllUser(); for (User user : users){
System.out.println(user); } session.close();}
  • 关于@Param
@Param注解用于给方法参数起一个名字。以下是总结的使用原则:1.在方法只接受一个参数的情况下,可以不使用@Param。2.在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。3.如果参数是 JavaBean , 则不能使用@Param。4.不使用@Param注解时,参数只能有一个,并且是Javabean

一对多和多对一

多对一

1.数据库设计

CREATE TABLE `teacher` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');CREATE TABLE `student` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,`tid` INT(10) DEFAULT NULL,PRIMARY KEY (`id`),KEY `fktid` (`tid`),CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');

2.引入Lombok插件

org.projectlombok
lombok
1.16.10

3.编写实体类

@Data //GET,SET,ToString,有参,无参构造public class Teacher {
private int id; private String name;}
@Datapublic class Student {
private int id; private String name; //多个学生可以是同一个老师,即多对一 private Teacher teacher;}

4.编写Mapper接口

public interface StudentMapper {
}
public interface TeacherMapper {
}

5.编写Mapper.xml配置文件

  • 按照结果进行嵌套处理就像SQL中的联表查询(推荐)

多对一 : association

一对多 : collection

  • 小结:
JavaType和ofType都是用来指定对象类型的JavaType是用来指定pojo中属性的类型ofType指定的是映射到list集合属性中pojo的类型

动态sql

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach
    实例 :
  • if :
  • where
  • Set
update blog
title = #{
title},
author = #{
author}
where id = #{
id};
  • choose
  • Foreach

Mybatis缓存

  • 二级缓存需要手动开启和配置,他是基于namespace级别的缓存
  • Mybatis定义了缓存接口Cache

一级缓存

  • 与数据库同一次会话期间查询到的数据会放在本地缓存中。

  • 以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库

转载地址:http://njyki.baihongyu.com/

你可能感兴趣的文章
Java EE 精萃
查看>>
Open Source 精萃
查看>>
Java EE 简介
查看>>
Weblogic 简介
查看>>
观察者模式 (Observer)
查看>>
Java 集合框架
查看>>
Weblogic 精萃
查看>>
Servlet 精萃
查看>>
XStream 精萃
查看>>
XStream 环境设置
查看>>
Git 分支
查看>>
Git 冲突
查看>>
Git Merging vs. Rebasing
查看>>
[第9课] 箱线图
查看>>
[第10课] 箱线图2
查看>>
[第11课]统计:集中趋势
查看>>
[第12课] 统计:样本和总体
查看>>
[第13课] 统计:总体方差
查看>>
[第14课] 统计:样本方差
查看>>
[第15课] 统计:标准差
查看>>