MyBatis(1)SqlSessionFactory接口和SqlSession接口-小羊的记录本

MyBatis简介

  • 支持普通SQL查询、存储过程和高级映射的持久层框架
  • 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索
  • 使用简单的XML或注解用于配置和原始映射
  • 用户无需关心底层数据库连接、数据访问和事务控制

SqlSessionFactory接口和SqlSession接口

在这里插入图片描述1.sqlSessionFactoryBuilder
创建sqlSessionFactory,创建完就没用了。创建方式有2种:一个是通过XML配置文件的方式,一个是通过Configuration实例来完成。

reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//sqlSessionFactory.getConfiguration().addMapper(IUser.class);

2.sqlSessionFactory(MyBatis的核心)
创建sqlSession对象,可以看做是数据库的连接池。
在一个MyBatis中以单例存在。

SqlSession session = sqlSessionFactory.openSession();
session.commit();

3.sqlSession
创建Mapper接口,相当于数据库连接对象(connection对象),可以在事务中执行多条SQL,通过commit、rollback等提交或回滚

4.Mapper
一个接口

代码实现(用Configure.xml的mapper映射)重点掌握

1.创建 Mybatis 配置文件Configure.xml:配置数据连接文件
重要的代码是<mapper resource="com/yiibai/mybatis/models/User.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>
	<typeAliases>
		<typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
		</typeAliases>
		<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://127.0.0.1:3306/yiibai" />
			    	<property name="username" value="root" />
			    	<property name="password" value="" />
            	</dataSource>
			</environment>
		</environments>

	<mappers>
	     <mapper resource="com/yiibai/mybatis/models/User.xml" />
	</mappers>
</configuration>

2.创建实体类User和映射文件User.xml
User:用户类,set()方法和get()方法

package com.yiibai.mybatis.models;

public class User {
	private int id;
	private String name;;
	private String phone;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
}

User.xml:写上SQL查询语句,注意select的id

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.yiibai.mybatis.models.UserMapper">
	<select id="GetUserByID" parameterType="int" resultType="User">
		select * from `user` where id = #{id}
    </select>
</mapper>

3.主程序

import java.io.Reader;

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 com.yiibai.mybatis.models.*;

public class HelloWord {
	private static SqlSessionFactory sqlSessionFactory;
	private static Reader reader;

	static {
		try {
			reader = Resources.getResourceAsReader("config/Configure.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static SqlSessionFactory getSession() {
		return sqlSessionFactory;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		SqlSession session = sqlSessionFactory.openSession();
		try {
			User user = (User) session.selectOne(
					"com.yiibai.mybatis.models.UserMapper.GetUserByID", 1);
			if(user!=null){
				String userInfo = "名字:"+user.getName();
				System.out.println(userInfo);
			}
		} finally {
			session.close();
		}
	}

}

实现方法(用注解@)

在这里插入图片描述

1.创建 Mybatis 配置文件Configure.xml
删除代码<mapper resource="com/yiibai/mybatis/models/User.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>
	<typeAliases>
		<typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
		</typeAliases>
		<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://127.0.0.1:3306/yiibai" />
			    	<property name="username" value="root" />
			    	<property name="password" value="" />
            	</dataSource>
			</environment>
		</environments>

	<mappers>
		 <!--注释掉mapper
        <mapper resource="com/yiibai/mybatis/models/User.xml" />-->
	</mappers>
</configuration>

2.创建实体类User,无需User.xml了
User:用户类,set()方法和get()方法

package com.yiibai.mybatis.models;

public class User {
	private int id;
	private String name;;
	private String phone;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
}

3.建立接口类IUser,声明方法,在com.yiibai.mybatis.dao包下

package com.yiibai.mybatis.dao;
import org.apache.ibatis.annotations.Select;//注解
import com.yiibai.mybatis.models.User;

public interface IUser {
     @Select("select * from user where id= #{id}")
     public User getUserByID(int id);//和User.xml里面配置select的id一致<select id="getUserByID">,有注解映射时候不需要User.xml啦
}

4…主程序

import java.io.Reader;
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 com.yiibai.mybatis.dao.IUser;//接口
import com.yiibai.mybatis.models.*;

public class HelloWord {
	private static SqlSessionFactory sqlSessionFactory;
	private static Reader reader;

	static {
		try {
			reader = Resources.getResourceAsReader("config/Configure.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
			sqlSessionFactory.getConfiguration().addMapper(IUser.class);//mapper
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static SqlSessionFactory getSession() {
		return sqlSessionFactory;
	}
	
	public static void main(String[] args) {

		SqlSession session = sqlSessionFactory.openSession();
		try {
			/*
			User user = (User) session.selectOne(
					"com.yiibai.mybatis.models.UserMapper.GetUserByID", 1);
			if(user!=null){
				String userInfo = "名字:"+user.getName();
				System.out.println(userInfo);
				*/
				IUser iuser = session.getMapper(IUser.class);
            	User user = iuser.getUserByID(1);
            	System.out.println("名字:"+user.getName());
			}
		} finally {
			session.close();
		}
	}

}

增删改查

1.User类同上
2.Configure.xml同上,需要mapper映射到User.xml

 <mappers>
        <mapper resource="com/yiibai/mybatis/models/User.xml" />
 </mappers>

3.User.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.yiibai.mybatis.dao.IUser">

    <select id="getUser" parameterType="int"
        resultType="com.yiibai.mybatis.models.User">
        SELECT *
        FROM USER
        WHERE id = #{userId}
    </select>


    <insert id="insertUser" parameterType="User">
        INSERT INTO USER(name,
        dept, website,phone)
        VALUES(#{name}, #{dept}, #{website}, #{phone})
    </insert>

    <select id="getUserList" resultType="com.yiibai.mybatis.models.User">
        SELECT * FROM USER
    </select>

    <update id="updateUser" parameterType="User">
        UPDATE USER
        SET
        name=
        #{name},
        dept = #{dept},
        website = #{website},
        phone = #{phone}
        WHERE
        id =
        #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        DELETE FROM USER WHERE id = #{id}
    </delete>

</mapper>

4.IUser接口

package com.yiibai.mybatis.dao;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.yiibai.mybatis.models.User;

public interface IUser {

    //public User getUserByID(int id);
    public List<User> getUserList();

    public void insertUser(User user);

    public void updateUser(User user);

    public void deleteUser(int userId);

    public User getUser(int id);
}

5.主程序

import java.io.Reader;
import java.text.MessageFormat;
import java.util.List;

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 com.yiibai.mybatis.dao.IUser;
import com.yiibai.mybatis.models.User;

public class Main {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("config/Configure.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSession() {
        return sqlSessionFactory;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SqlSession session = sqlSessionFactory.openSession();
        try {
            //sqlSessionFactory.getConfiguration().addMapper(IUser.class);
            //User user = (User) session.selectOne( "com.yiibai.mybatis.models.UserMapper.getUserByID", 1);

            // 用户数据列表
            getUserList();
            // 插入数据
            // testInsert();

            // 更新用户
            //testUpdate();

            // 删除数据
            //testDelete();

        } finally {
            session.close();
        }
    }

    //
    public static void testInsert()
    {
        try
        {
            // 获取Session连接
            SqlSession session = sqlSessionFactory.openSession();
            // 获取Mapper
            IUser userMapper = session.getMapper(IUser.class);
            System.out.println("Test insert start...");
            // 执行插入
            User user = new User();
            user.setId(0);
            user.setName("Google");
            user.setDept("Tech");
            user.setWebsite("http://www.google.com");
            user.setPhone("120");
            userMapper.insertUser(user);
            // 提交事务
            session.commit();

            // 显示插入之后User信息
            System.out.println("After insert");
            getUserList();
            System.out.println("Test insert finished...");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    // 获取用户列表
    public static void getUserList() {
        try {
            SqlSession session = sqlSessionFactory.openSession();
            IUser iuser = session.getMapper(IUser.class);
            // 显示User信息
            System.out.println("Test Get start...");
            printUsers(iuser.getUserList());
            System.out.println("Test Get finished...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void testUpdate()
    {
        try
        {
            SqlSession session = sqlSessionFactory.openSession();
            IUser iuser = session.getMapper(IUser.class);
            System.out.println("Test update start...");
            printUsers(iuser.getUserList());
            // 执行更新
            User user = iuser.getUser(1);
            user.setName("New name");
            iuser.updateUser(user);
            // 提交事务
            session.commit();
            // 显示更新之后User信息
            System.out.println("After update");
            printUsers(iuser.getUserList());
            System.out.println("Test update finished...");
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    // 删除用户信息
    public static void testDelete()
    {
        try
        {
            SqlSession session = sqlSessionFactory.openSession();
            IUser iuser = session.getMapper(IUser.class);
            System.out.println("Test delete start...");
            // 显示删除之前User信息
            System.out.println("Before delete");
            printUsers(iuser.getUserList());
            // 执行删除
            iuser.deleteUser(2);
            // 提交事务
            session.commit();
            // 显示删除之后User信息
            System.out.println("After delete");
            printUsers(iuser.getUserList());
            System.out.println("Test delete finished...");
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 
     * 打印用户信息到控制台
     * 
     * @param users
     */
    private static void printUsers(final List<User> users) {
        int count = 0;

        for (User user : users) {
            System.out.println(MessageFormat.format(
                    "============= User[{0}]=================", ++count));
            System.out.println("User Id: " + user.getId());
            System.out.println("User Name: " + user.getName());
        }
    }
}

总结

1.User类
2.Configure.xml

  • 可配置mapper:一种是通过XML配置文件的方式
    <mapper resource="com/yiibai/mybatis/models/User.xml" />
    .User.xml(配置mapper时候使用)
<select id="GetUserByID" parameterType="int" resultType="User">
		select * from `user` where id = #{id}
</select>
  • 可不配置mapper:一种是通过Configuration实例来完成,在主程序中
    sqlSessionFactory.getConfiguration().addMapper(IUser.class);
    IUser接口(不配置mapper时使用)

3.主程序


版权声明:本文为weixin_40593830原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。