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(); Listuserlist = session.selectList("findAll"); for(User user : userlist) { System.out.println(user.getUser_name()); System.out.println(user.getSalary()); } }
返回类型还可以指定为map类型
java代码:
List
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代码:
Mapuser1 = 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,例如: