Mybatis总结_mybatis总结

2020-02-27 其他工作总结 下载本文

Mybatis总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“mybatis总结”。

Mybatis总结

1.mybatis的简单概述: 1.1 mybatis简单概述:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

1.2 功能架构: 分为三层:

(1).API接口层:定义api接口,外部人员通过这个接口来调用方法从而操纵数据库。

(2).数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理

等。它主要的目的是根据调用的请求完成一次数据库操作。

(3).基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓

存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数 据处理层提供最基础的支撑。

2.mybatis快速入门: a.添加jar包:

mybatis

asm-3.3.1.jar

cglib-2.2.2.jar

commons-logging-1.1.1.jar

log4j-1.2.16.jar

mybatis-3.1.1.jar

slf4j-api-1.6.2.jar

slf4j-log4j12-1.6.2.jar

mysql驱动

mysql-connector-java-5.1.7-bin.jar

b.建库+表:

create database mybatis;

use mybatis;CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);

INSERT INTO users(NAME, age)VALUES('Tom', 12);

INSERT INTO users(NAME, age)VALUES('Jack', 11);

c.在应用的src下添加Mybatis的配置文件conf.xml:

d.定义表所对应的实体类:

public cla User {

private int id;

private String name;

private int age;

}

e.定义操作users表的sql映射文件userMapper.xml:

select * from Blog where id = #{id}

f.在conf.xml文件中注册userMapper.xml文件:

g.编写测试代码:执行定义的select语句:

public cla Test {

public static void main(String[] args)throws IOException {

String resource = “conf.xml”;

//加载mybatis的配置文件(它也加载关联的映射文件)

Reader reader = Resources.getResourceAsReader(resource);

//构建sqlSeion的工厂

SqlSeionFactory seionFactory = new SqlSeionFactoryBuilder().build(reader);

//创建能执行映射文件中sql的sqlSeion

SqlSeion seion = seionFactory.openSeion();

//映射sql的标识字符串

String statement = “net.lamp.java.mybatis.bean.userMapper”+“.selectUser”;

//执行查询返回一个唯一user对象的sql

User user = seion.selectOne(statement, 1);

System.out.println(user);

}

}

3.编写基于mybatis的操作users表的CRUD操作的dao类: a.XML的实现:

1.定义sql映射xml文件:

insert into users(name, age)values(#{name}, #{age});

delete from users where id=#{id}

update users set name=#{name},age=#{age} where id=#{id}

select * from users where id=#{id}

select * from users

2.在config.xml中注册这个映射文件

3.在dao中调用:

public User getUserById(int id){

SqlSeion seion = seionFactory.openSeion();

User user = seion.selectOne(URI+“.selectUser”, id);

return user;

} b.注解的实现:

1.定义sql映射的接口

public interface UserMapper {

@Insert(“insert into users(name, age)values(#{name}, #{age})”)

public int insertUser(User user);

@Delete(“delete from users where id=#{id}”)

public int deleteUserById(int id);

@Update(“update users set name=#{name},age=#{age} where id=#{id}”)

public int updateUser(User user);

@Select(“select * from users where id=#{id}”)

public User getUserById(int id);

@Select(“select * from users”)

public List getAllUser();

}

2.在config中注册这个映射接口

3.在dao类中调用

public User getUserById(int id){

SqlSeion seion = seionFactory.openSeion();

UserMapper mapper = seion.getMapper(UserMapper.cla);

User user = mapper.getUserById(id);

return user;

}

4.几个可以优化的地方: a.连接数据库的几个配置可以单独放在一个properties文件中

db.properties:

b.为实体类定义别名,简化sql映射xml文件中的引用

c.可以在src下加入log4j的配置文件,打印日志信息(主要是sql语句)

1.log4j.properties

log4j.properties,log4j.rootLogger=DEBUG, Console

#Console

log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c]-%m%n

log4j.logger.java.sql.ResultSet=INFO

log4j.logger.org.apache=INFO

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

5.解决表的字段名与实体类的属性名不相同的冲突: a.准备表和数据:

CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VARCHAR(20),order_price FLOAT);

INSERT INTO orders(order_no, order_price)VALUES('aaaa', 23);

INSERT INTO orders(order_no, order_price)VALUES('bbbb', 33);

INSERT INTO orders(order_no, order_price)VALUES('cccc', 22);

b.定义实体类:

public cla Order {

private int id;

private String orderNo;

private float price;

}

c.实现getOrderById(id)的查询

定义:

select * from orders where order_id=#{id}

6.实现联表查询: 1).一对一:

a.创建表和数据:

CREATE TABLE teacher(t_id INT PRIMARY KEY AUTO_INCREMENT,t_name VARCHAR(20));

CREATE TABLE cla(c_id INT PRIMARY KEY AUTO_INCREMENT,c_name VARCHAR(20),teacher_id INT);

ALTER TABLE cla ADD CONSTRAINT fk_teacher_id FOREIGN KEY(teacher_id)REFERENCES teacher(t_id);

INSERT INTO teacher(t_name)VALUES('LS1');

INSERT INTO teacher(t_name)VALUES('LS2');

INSERT INTO cla(c_name, teacher_id)VALUES('bj_a', 1);

INSERT INTO cla(c_name, teacher_id)VALUES('bj_b', 2);

b.定义实体类:

public cla Teacher {

private int id;

private String name;

}

public cla Claes {

private int id;

private String name;

private Teacher teacher;

}

c.定义sql映射文件ClaMapper.xml:

resultMap=“ClaesResultMap2”>

select * from cla where c_id=#{id}

select t_id id, t_name name from teacher where t_id=#{id}

方式二:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集

--> select * from cla c,teacher t where c.c_id=#{id} and c.teacher_id=t.t_id;

2)一对多

a.创建表和数据:

CREATE TABLE student(s_id INT PRIMARY KEY AUTO_INCREMENT,s_name VARCHAR(20),cla_id INT);

INSERT INTO student(s_name, cla_id)VALUES('xs_B', 1);

INSERT INTO student(s_name, cla_id)VALUES('xs_D', 1);

INSERT INTO student(s_name, cla_id)VALUES('xs_E', 1);

INSERT INTO student(s_name, cla_id)VALUES('xs_A', 2);

INSERT INTO student(s_name, cla_id)VALUES('xs_H', 2);

INSERT INTO student(s_name, cla_id)VALUES('xs_J', 2);

b.定义实体类:

public cla Student {

private int id;

private String name;

}

public cla Claes {

private int id;

private String name;

private Teacher teacher;

private List students;

}

c.定义sql映射文件ClaMapper.xml:(根据claId查询对应的班级信息,包括学生)

select * from cla c,teacher t, student s where c.c_id=#{id} and c.teacher_id=t.t_id and s.cla_id=c.c_id

select * from cla c where c.c_id=#{id}

select t_id id, t_name name from teacher where t_id=#{id}

select s_id id, s_name name from student where cla_id=#{id}

《Mybatis总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
Mybatis总结
点击下载文档
相关专题 mybatis总结 MyBatis mybatis总结 MyBatis
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文