揭秘——Mybatis单独使用时,查询可用,但是更新和删除,新增操作无法完成

一语中的,很有可能是你在执行了dao函数对数据库操作后没有执行:sqlSession.commit();也就是说你没有真正的吧sql语句提交到数据库执行。好问题解决再来回顾一下单独使用Mybatis的时候要注意的事情,平时大部分都是结合spring,springMVC做web开发,但最近用到单独的后台程序,不涉及web页面,感觉Mybatis的基本操作都忘了。

首先Mybatis是一个持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得
下面是使用xml配置文件创建sqlsessionFactory的例子

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
  new SqlSessionFactoryBuilder().build(inputStream);

以及带有数据库配置文件的创建方式:

//创建sqlSessionFactory
//MyBatis配置文件
System.out.println("我在前面");
String resource = "config\\mybatis-config.xml";
String props = "config\\jdbc.properties";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
InputStream inputStream2 = Resources.getResourceAsStream(props);
Properties properties = new Properties();
properties.load(inputStream2);
//创建会话工厂,传入MyBatis的配置信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, properties);

配置文件

<?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="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

数据库配置文件就不贴出来了

其实也可以不用配置文件创建sqlSessionFactory:

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory =
  new JdbcTransactionFactory();
Environment environment =
  new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory =
  new SqlSessionFactoryBuilder().build(configuration);

实际使用,这里就是要注意的地方了,这里没有更新数据库的操作只有查询操作,所以没有使用session.commit();也可以,但是一旦涉及到数据库的更新操作就必须使用,不然sql不会真的提交到数据库执行,自然系统内部也不会报错。

SqlSession session = sqlSessionFactory.openSession();
try {
  Blog blog = session.selectOne(
    "org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
  session.close();
}

dao要从session中获取

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

猜你喜欢

转载自blog.csdn.net/Phoenix_smf/article/details/81213928