博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis的简介及其基本使用
阅读量:6121 次
发布时间:2019-06-21

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

1、Mybatis简介

以前称iBatis-->现在称mybatis

作用:封装jdbc操作,简化了数据库访问方式

封装功能如下:

(1)获得连接

(2)执行sql

(3)释放连接

(4)sql参数的设置(直接传递Emp实体对象作为参数)

sql语句的新写法:insert into emp (name,age) values (#{name},#{age});

其中#{name},#{age}即指代的是Emp实体的属性,名称要与实体的属性名一致

(5)封装了结果集映射成实体对象的过程

要求:实体类属性名要与ResultSet结果集中的列名保持一致

开发者的主要工作:写实体类以及sql语句,然后使用SqlSession对象执行sql操作

2、搭建MyBatis开发环境,并对Emp表进行操作

(1)引入相关的MyBatis的jar包

(2)添加一个配置文件,mybatis-config.xml,指定数据库连接参数,以及sql定义文件

(3)编写一个Emp实体类,属性名一般与Emp表中的字段表名称保持一致

(4)创建一个EmpSql.xml文件,里面编写相关的sql语句(定义sql,指定结果集需要映射称哪个实体类)

(5)利用mybatis-config.xml,得到SqlSession对象,即可执行某些数据库操作

添加一个mybatis-config.xml:

 创建一个实体类:

package com.zlc.entity;public class User {    private Integer user_id;    private String  user_name;    private Integer age;    private Double  salary;    public Integer getUser_id() {        return user_id;    }    public void setUser_id(Integer user_id) {        this.user_id = user_id;    }    public String getUser_name() {        return user_name;    }    public void setUser_name(String user_name) {        this.user_name = user_name;    }        public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Double getSalary() {        return salary;    }    public void setSalary(Double salary) {        this.salary = salary;    }   }

创建一个UserMapper.xml

insert into user (user_name,age,salary) values (#{user_name},#{age},#{salary});

测试类:

public static void main(String[] args) throws IOException {        String conf = "mybatis-config.xml";        InputStream is = Resources.getResourceAsStream(conf);        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);        SqlSession session = ssf.openSession();        User user1 = new User();        user1.setUser_name("张凌超");        user1.setAge(23);        user1.setSalary(8000.0);            session.insert("addUser", user1);        session.commit();        List
userlist = session.selectList("findAll"); for(User user : userlist) { System.out.println(user.getUser_name()); System.out.println(user.getSalary()); } }

返回类型还可以指定为map类型

 

 

java代码:

List
> userlist = session.selectList("findAll"); for(Map
m : userlist) { System.out.println(m.get("user_name")); System.out.println(m.get("age")); }

 

2、传递多个参数的方法.

(1)使用实体类传递参数,采用表达式指明参数,参数名称与实体类属性名称一致

insert into user (user_name,age,salary) values (#{user_name},#{age},#{salary});

java代码:

User user1 = new User();        user1.setUser_name("张凌超");        user1.setAge(23);        user1.setSalary(8000.0);            session.insert("addUser", user1);        session.commit();//增删改必须要有这个操作才生效

(2)使用Map类集合,采用表达式指明参数,参数名称与Map集合key一致

insert into user (user_name,age,salary) values (#{user_name},#{age},#{salary});

java代码:

Map
user1 = new HashMap<>(); user1.put("user_name","王五"); user1.put("age", 20); user1.put("salary",5609); session.insert("addUser", user1); session.commit();//增删改必须要有这个事务提交操作

 3、返回值类型

(1)实体类

(2)Map集合类

(3)基本类型

常见问题:

(1)实体类属性与数据库中表的列名不一致时,怎么办?

解决1:sql语句查询时使用别名,例如:select user_name name from user

解决2:不使用resultType映射结果集,而是采用resultMap,例如:

 

   

 

转载于:https://www.cnblogs.com/zlingchao/p/9426153.html

你可能感兴趣的文章
Java 生产条形码代码
查看>>
python web开发-flask连接sqlite数据库
查看>>
Zxing二维码扫描
查看>>
MMU的作用
查看>>
决心书
查看>>
计算机网络(2)
查看>>
windows下使用ofstream默认输出内存数据到文件中时,会自动将0A换成0A0D
查看>>
Nginx unit 源码安装初体验
查看>>
PTA基础编程题目集6-2多项式求值(函数题)
查看>>
哈佛医生帮你增强记忆力
查看>>
Cloudera Search配置
查看>>
[原译]类型安全的黑板模式(属性包)
查看>>
【转】python中的一维卷积conv1d和二维卷积conv2d
查看>>
写可测试的代码
查看>>
XML学习(C#创建XML)[转自他人文章,仅做学习之用]
查看>>
[LeetCode] Two Sum II - Input array is sorted
查看>>
js数组去重三种方法
查看>>
洛谷4147:玉蟾宫——题解
查看>>
tomcat 调优
查看>>
快速部署Python应用:Nginx+uWSGI配置详解
查看>>