Mybatis
-
mybatis是什么
它是一个持久化层的框架
它对jdbc做了封装,简化增删改查的操作,具体封装功能如下:
-封装了获取连接、执行SQL语句,关闭连接
-封装了SQL参数的设置
-封装了结果集中记录映射成实体对象 -
mybatis的API
-新建maven项目
-导包:(在pom.xml中添加Mybatis、数据库驱动包)
<!-- 数据库驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- mybatis jar包 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
-添加mybatis的核心配置文件:( mybatis-config.xml)
<?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>
<!--数据库连接信息配置-->
<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/project"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 加载sql映射文件-->
<mappers>
<mapper resource="com/haishi/UserMapper.xml"/>
</mappers>
</configuration>
-使用mybatis访问数据库
-开发实体类User(其中属性名要和字段名保持一致)
package com.haishi;
import java.sql.Timestamp;
public class User {
private Integer id;
private String userName;
private String pwd;
private String phone;
private String email;
private Timestamp time;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getuserName() {
return userName;
}
public void setuserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Timestamp getTime() {
return time;
}
public void setTime(Timestamp time) {
this.time = time;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", pwd=" + pwd + ", phone=" + phone + ", email=" + email
+ ", time=" + time + "]";
}
}
-添加sql映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace表示命名空间 -->
<mapper namespace="test">
</mapper>
mapper映射是一个符合映射文件要求的接口,它跟上面讲的映射文件是互相关联的叫映射器。MyBatis会自动生成一个符合该接口要求的对象,只需要调用该对象的方法,就可以访问数据库。
public class TestCase{
//创建session对象,用它获得映射器的对象
private SqlSession session;
@Before
public void init() throws IOException{
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=builder.build(is);
session=factory.openSession();
}
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace表示命名空间 -->
<mapper namespace="test">
<!-- id要唯一 -->
<insert id="save" parameterType="com.haishi.User">
INSERT INTO user_t VALUES(null,#{user_name},#{pwd},#{phone},#{email},#{time})
</insert>
<!--
查询所有员工的信息
resultType属性:返回结果的类型
-->
<select id="findALL" resultType="com.haishi.User">
SELECT *FROM user_t
</select>
<!-- 根据id查询用户信息 -->
<select id="findById" parameterType="java.lang.Integer" resultType="com.haishi.User">
SELECT *FROM user_t where id=#{i}
</select>
<!-- 根据修改用户信息 -->
<update id="update" parameterType="com.haishi.User">
UPDATE user_t SET user_name=#{user_name} WHERE id=#{id}
</update>
<!-- 根据id删除用户的信息 -->
<delete id="del" parameterType="int">
DELETE FROM user_t where id=#{i}
</delete>
<!-- 根据id查询用户信息返回map类型的结果 -->
<select id="selectById" parameterType="int" resultType="map">
SELECT * FROM user_t WHERE id=#{id}
</select>
<!-- 使用ResultMap解决属性名与字段名不一致的情况 -->
<resultMap id="userMap" type="com.haishi.User">
<!--
column:结果集中的字段名
property:映射对象的属性名
-->
<result column="user_name" property="userName"/>
</resultMap>
<select id="selById" parameterType="int" resultMap="userMap">
SELECT * FROM user_t WHERE id=#{id}
</select>
</mapper>
TestCase.java
package Test;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
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 org.junit.Before;
import org.junit.Test;
import com.haishi.User;
public class TestCase{
private SqlSession session;
@Before
public void init() throws IOException{
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=builder.build(is);
session=factory.openSession();
}
//@Test
public void test1(){
Connection conn=session.getConnection();
System.out.println(conn);
}
//@Test
public void test2(){
User u=new User();
u.setuserName("zwk");
u.setPwd("098");
u.setPhone("18075326038");
u.setTime(new Timestamp (System.currentTimeMillis()));
u.setEmail("2378222699@qq.com");
session.insert("test.save",u);
/**
* 默认取消自动提交事务,手动提交事务
*/
session.commit();
session.close();
}
//@Test
public void test3(){
List<User> list=session.selectList("test.findALL");
System.out.println(list);
System.out.println(list.size());
session.close();
//只有增删改需要提交事务,查并不需要提交事务
}
//@Test
public void test4(){
User u=session.selectOne("test.findById",1002);
System.out.println(u);
session.close();
//只有增删改需要提交事务,查并不需要提交事务
}
@Test
public void test5(){
User u=session.selectOne("test.findById",1002);
u.setuserName("zry");
u.setPwd("345");
session.update("test.update",u);
/**
* 默认取消自动提交事务,手动提交事务
*/
session.commit();
session.close();
}
//@Test
public void test6(){
session.delete("test.del",1005);
session.commit();
session.close();
}
@Test
public void test7(){
Map<String,Object> map=session.selectOne("test.selectById",1003);
System.out.println(map);
System.out.println(map.get("user_name"));
session.close();
}
//@Test
public void test8(){
User u=session.selectOne("test.selById",1002);
System.out.println(u);
session.close();
//只有增删改需要提交事务,查并不需要提交事务
}
}
- Mybatis原理图