MyBatis数据持久化(二)建立数据库会话
上篇文章中介绍了我们使用mybatis前的准备工作,并在程序中通过jdbc与mysql数据库成功建立连接,接下来介绍如何使用mybatis与数据库建立会话。我们需要以下几个步骤:
1.在build path中引入mybatis的jar包。
2.新建mybatis数据库配置文件SqlMapConfig.xml,它是一个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/mybatis?characterEncoding=UTF8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="User.xml"/>
</mappers>
</configuration>
3.新建sql语句配置文件User.xml,我们所有的sql语句均写在该文件中,内容如下:
<?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="User">
<select id="queryUserInfoByName" parameterType="string"
resultType="com.mybatis.domain.User">
select * from User where username = #{username}
</select>
</mapper>
这里我们通过select标签添加一条select语句,并通过mapper标签的namespace属性为这些sql增加一个命名空间。
4.新建持久化映射类com.mybatis.domain.User,内容如下:
package com.mybatis.domain;
public class User {
private String username;
private String password;
private String phone;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
//为方便输出信息,我们重写toString方法
@Override
public String toString() {
return "username:" + username + ",password:" + password + ",phone" + phone;
}
}
User类有三个属性,分别和数据库中的字段对应,我们需要为每个属性增加setter和getter方法,除此之外,为了方便我们打印对象的属性信息,笔者重写了User类的toString方法。
5.新建测试类com.mybatis.exam2.MyBatisConn,代码如下:
package com.mybatis.exam2;
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 org.junit.Test;
import com.mybatis.domain.User;
public class MyBatisConn{
@Test
public void testMybatisConn()
{
SqlSession session = null;
try {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建一个数据库会话
session = sessionFactory.openSession();
User user = (User)session.selectOne("User.queryUserInfoByName","小王");
//此处会调用user的toString方法
System.out.println(user);
} catch (Exception e) {
// TODO Auto-generated catch block
if(null != session)
{
session.close();
}
e.printStackTrace();
}
//关闭会话
if(null != session)
{
session.close();
}
}
}
要建立数据库会话,我们首先需要一个SqlSessionFactory对象,可以通过SqlSessionFactoryBuilder对象的build方法获取,它需要一个和数据库配置文件相关的输入流作为参数。
我们通过 Resources.getResourceAsReader("SqlMapConfig.xml")获取一个输入流对象。
有了SqlSessionFactory对象,我们通过SqlSessionFactory类的openSession方法就可以建立一个数据库会话,它返回一个DefaultSqlSession对象。
通过DefaultSqlSession对象,我们可以对数据库进行各种操作,这里调用selectOne方法进行查询,第一个参数指定sql配置文件中配置的sql语句,形式为命名空间 + sql语句的ID。第二个参数会被传递到sql中:
select * from User where username = #{username}
我们通过#{username}这种形式定义个一个占位符,在本例中最终生成的sql语句为:
select * from User where username = '小王'
最后当数据库会话不再使用时,一定不要忘了关闭。
6.在Outline视图MyBatisConn的testMybatisConn方法上点击右键,Debug As->Junit Test。
控制台中输出:
username:小王,password:123456a,phone13535999538
整个项目的文件结构如下图所示:
在接下来的文章中,我们会接触到更多关于mybatis的配置和使用方法。
MyBatis数据持久化(二)建立数据库会话的更多相关文章
- MyBatis数据持久化(三)增删改查
上篇文章中我们使用mybatis成功建立数据库会话,并从表中查询出相应的数据,本文在此基础上介绍MyBatis另外几种操作,即插入.修改.删除记录. 1.修改User.xml文件,增加几条sql语句: ...
- MyBatis数据持久化(六)resultMap使用
resultMap是MyBatis最强大也是最重要的特性,使用它我们可以將查询结果或者sql输入条件和一个HashMap的key进行映射,大大简化了sql查询条件的输入,而且使得数据的查询变得非常灵活 ...
- MyBatis数据持久化(七)多表连接查询
本节继续以多表连接查询的案例介绍使用resultMap的好处,对于两张以上的表进行关联查询,当我们有选择的从不同表查询所需字段时,使用resultMap是相当方便的.例如我们有两张表,分别为用户表Us ...
- 数据持久化之嵌入式数据库 SQLite(三)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 SQLite 是 D. Richard Hipp 用 C 语言编写的开源 ...
- MyBatis数据持久化(十一)Mybatis3、Spring4、Struts2整合开发
上一节我们將Mybatis和Spring4进行整合,本节向大家介绍Mybatis在Web开发中的应用,并与主流的MVC框架Struts2进行整合. 我们首先需要获取Struts2框架,Struts2官 ...
- MyBatis数据持久化(十)与Spring4整合
前面几节介绍了mybatis的基本使用方法,本节主要介绍如何使用mybatis与主流的IoC容器Spring进行整合. 我们首先需要获取Spring框架的jar文件,在写本文时spring的最新Rel ...
- MyBatis数据持久化(五)数据源配置优化
在前面的教程中,我们把数据库的驱动.用户名.密码等配置项全部写在 SqlMapConfig.xml中: <dataSource type="POOLED"> <p ...
- MyBatis数据持久化(一)准备工作
MyBatis简介 mybatis的前生是ibatis,它是一款非常优秀的java持久层框架,所有sql语句写在配置文件中,和另外一款比较知名的orm框架hibernate比起来显得更加小巧灵活,也是 ...
- MyBatis数据持久化(九)动态sql
本文摘自:mybatis参考文档中文版 MyBatis的一个强大的特性之一通常是它的动态SQL能力.如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能 ...
随机推荐
- B/S发布到服务器
域名准备好了?准备好就开始跟我操作吧: 1:预先在项目的同目录下新建文件夹 Public 2:找到项目解决方案重新生成 3:项目右击 发布 到 Public 4: 登入服务器 打开 Internet管 ...
- 洛谷P1291 [SHOI2002]百事世界杯之旅(期望DP)
题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶 ...
- MySQL高级查询和编程基础
第一章 数据库设计 一.数据需求分析: 数据需求分析是为后续概念设计和逻辑结构设计做准备. 结构:(1)对现实世界要处理的对象进行详细的调查. (2)收集基础数.据. (3)对所收集的数据进行处理. ...
- Python 之 入门须知
1.Python2.0不支持中文,3.0支持 2.版本问题
- GCC中的强符号和弱符号及强引用和弱引用
1. 强符号和弱符号 1.1 u-boot和kernel中的__weak指令 u-boot和kernel比较普遍地使用了__weak来定义函数. 在include\linux\compiler-gcc ...
- luoguP2742 【模板】二维凸包 / [USACO5.1]圈奶牛 二维凸包
我们知道,纵坐标最小的点一定在凸包上(如果有多个,那它们都会被取到) 随便找一个纵坐标最小的点,将其他所有点按照这个点为原点极角排序,我们发现极角大的会在极角小的后面加入(感性认知一下) 考虑新(加入 ...
- C# 基础复习 四 ADO
调用存储过程,并接收多个表的查询结果 一个表用一个DataTable,DataSet可以存储多个DataTable DataSet需要SqlDataAdapter来填充数据 SqlConnection ...
- css——定位
position absolute:绝对定位 1.以页面的左上角为原点 2.不保留原来的位置 3.z-index可以调整图层顺序 如果想实现以父级元素左上角为原点.则:父级相对,子级绝对 在子级绝对的 ...
- luogo p3379 【模板】最近公共祖先(LCA)
[模板]最近公共祖先(LCA) 题意 给一个树,然后多次询问(a,b)的LCA 模板(主要参考一些大佬的模板) #include<bits/stdc++.h> //自己的2点:树的邻接链表 ...
- thinkphp queue
composer create-project topthink/think composer require topthink/think-queue php think queue:work -- ...