标签:属性 names 忘记 类型 java eal getc from ini
在与数据库连接的时候
需要把与数据库连接的代码放在静态代码块中
从XML中构建SqlSessionFactory,再从SqlSessionFactory构建获取SqlSession
private static SqlSessionFactory factory;
	
	static{
		  InputStream in = null;
		  try {
			    in = Resources.getResourceAsStream("mybatis.xml");
			    LogManager.getLogger().debug("加载mybatis配置文件成功...");
		  } catch (IOException e) {
			    LogManager.getLogger().debug("加载mybatis配置文件失败...");
		  }
		  factory = new SqlSessionFactoryBuilder().build(in);
		  LogManager.getLogger().debug("根据mybatis配置文件信息构建SqlSessionFactory实例对象成功...");
	}
/**
	 * 获得数据库会话连接,默认手动事务
	 * 需要手动结束事务  rollback 或者 commit   //rollback  在数据库里做修改后 ( update ,insert , delete)未commit 之前 使用rollback 可以恢复数据到修改之前
	 * @return
	 */
public static SqlSession getSession(){
  SqlSession session = factory.openSession();
		  LogManager.getLogger().debug("根据SqlsessionFactory生产手动事务Sqlsession实例对象成功...");
		  return session;
	}
	
	/**
	 * 获得数据库会话连接,默认自动事务
	 * @return
	 */
	public static SqlSession getAutoTransactionSession(){
		  SqlSession session = factory.openSession(true);  // SqlSession org.apache.ibatis.session.SqlSessionFactory.openSession(boolean autoCommit)  为true的时候会自动提交,不需要手动。
		  LogManager.getLogger().debug("根据SqlsessionFactory生产自动事务Sqlsession实例对象成功...");
		  return session;
	}
配置mybatis.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>
	  <properties resource="db.properties"/> <!-- 加载外部的属性文件,使用${key}取到 -->
  <typeAliases>
		  <!-- <typeAlias type="" alias=""/> -->
		    <package name="com.yc.mybatis.entity"/>  <!-- 对包中的所有类命别名,别名为类名 -->
	  </typeAliases>
  <environments default="development">
		    <environment id="development">
			      <transactionManager type="JDBC" />
			      <dataSource type="POOLED">
				        <property name="driver" value="${jdbc.driverClassName}" />
				        <property name="url" value="${jdbc.url}" />
				        <property name="username" value="${jdbc.username}" />
				        <property name="password" value="${jdbc.password}" />
			      </dataSource>
		    </environment>
	  </environments>
  <mappers>
		    <mapper resource="Mapper/BlogMapper.xml"/>  <!-- 注册映射文件 -->
	  </mappers>
</configuration>
BlogMapper类
import com.yc.mybatis.entity.Blog;
/**
 * 映射接口:与映射文件相对应的接口
 * @author Administrator
 *
 */
public interface BlogMapper {
	  //与映射文件中的sql语句映射
	  Blog getBlogById(int id);
	
	  //插入操作
	  int insertBlog(Blog blog);
	
	  //修改操作
	  int updateBlogById(Blog blog);
	
	  //删除操作
	  int delBlogById(int id);
	
	  //查询所有
	  List<Blog> findAllBlogs();
}
对应的BlogMapper.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.yc.mybatis.mapper.BlogMapper">
  <!-- id与映射口中的方法名一致
		     resultType与映射接口中方法的返回类型
		     parameterType与映射接口中方法的参数列表的参数类型一致
		     #{xx} xx与映射接口中方法的参数列表的参数名一致
	   -->
  <select id="getBlogById" resultType="Blog" 
	    parameterType="int">
		    select * from blog where id = #{id}
	  </select>
	
	  <insert id="insertBlog" parameterType="Blog">
		    insert into blog values(#{id},#{author},#{title})
	  </insert>
	
	  <update id="updateBlogById" parameterType="Blog">
		    update blog set author=#{author},title=#{title} where id=#{id} 
	  </update>
	
	  <delete id="delBlogById" parameterType="int">
		    delete from blog where id=#{id}
	  </delete>
	
	  <select id="findAllBlogs" resultType="Blog">
		    select * from blog
	  </select>
</mapper>
使用junit框架进行测试
测试类如下:
package com.yc.mybatis.util;
import static org.junit.Assert.*;
import java.sql.Connection;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.yc.mybatis.entity.Blog;
import com.yc.mybatis.mapper.BlogMapper;
public class MybatisUtilTest {
	
	  @Test
	  public void testGetConn() {
		    SqlSession session = MybatisUtil.getSession();
		    Connection con = MybatisUtil.getSession().getConnection();
		    MybatisUtil.close(session);
		    assertNotNull("数据库连接失败",con);
	  }
	  @Test  //查询
	  public void testGetBlog(){
		    SqlSession session = MybatisUtil.getSession();
		    BlogMapper bm = session.getMapper(BlogMapper.class);
		    Blog blog = bm.getBlogById(2);
		    System.out.println("==>" + blog);
		    MybatisUtil.close(session);
		    assertNotNull(blog);
	  }
	
	  @Test    //插入
	  public void testInsert(){
		    SqlSession session = MybatisUtil.getSession();
		    //默认启动了事务,需要手动结束事务  rollback 或者 commit
		    BlogMapper bm = session.getMapper(BlogMapper.class);
		    Blog blog = new Blog(3,"jdsf","gloria");
		    int result = bm.insertBlog(blog);
		    //session.rollback();   在数据未commit之前,对数据库的insert,del,update操作,使数据库回到修改之前的状态。
		    session.commit();
		    MybatisUtil.close(session);
		    assertEquals(1, result);
	  }
	
	  @Test   
	  public void testInsert02(){
		    //启动了自动事务,不需要commit或者rollback
		    SqlSession session = MybatisUtil.getAutoTransactionSession();
		    BlogMapper bm = session.getMapper(BlogMapper.class);
		    Blog blog = new Blog(5,"这是第四条","自信");
		    int result = bm.insertBlog(blog);
		    MybatisUtil.close(session);
		    assertEquals(1, result);
	  }
	
	   @Test   //报错说 initializationError是因为没有 @Test标识
	  public void testUpdate(){
		    SqlSession session = MybatisUtil.getAutoTransactionSession();
		    BlogMapper bm = session.getMapper(BlogMapper.class);
		    Blog blog = new Blog(1,"Candy","工作不容易");
		    int result = bm.updateBlogById(blog);
		    MybatisUtil.close(session);
		    assertEquals(1, result);
	  }
	
	  @Test
	  public void testDelBlog(){
		    SqlSession session = MybatisUtil.getAutoTransactionSession();
		    BlogMapper bm = session.getMapper(BlogMapper.class);
		    //int id = 1;
		    int result = bm.delBlogById(2);
		    MybatisUtil.close(session);
		    assertEquals(1, result);
	  }
	
	  @Test
	  public void testFindAll(){
		    SqlSession session = MybatisUtil.getAutoTransactionSession();
		    BlogMapper bm = session.getMapper(BlogMapper.class);
		    List<Blog> blogs = bm.findAllBlogs();
		    System.out.println(blogs);
		    MybatisUtil.close(session);
		    assertNotNull(blogs);
	  }
}
到此为止,基于mybatis的简单增删改查就基本能操作了
在插入数据的时候因为启动的是手动事务,然后没有采取commit/rollback,控制台显示更新了一条内容但数据库查不到内容
在写测试方法的时候忘记写@Test所以在测试的时候报错说initializationError
还有写sql语句的时候习惯在后面加上一个分号,但是在BlogMapper.xml中不需要加分号
不然会报错说未知符号
标签:属性 names 忘记 类型 java eal getc from ini
原文地址:http://www.cnblogs.com/gloriasecretplace/p/6373282.html