揭秘——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);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Phoenix_smf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值