(三)mybatis 的使用(入门)
目录
mybatis 的使用 —— 准备
下载完 mybatis 以后,将其核心包和依赖包导入工程即可 ;不过 mybatis 也依赖于 log4j 因此,需要再导入一个 log4j 的配置文件 ;
mybatis 的使用 —— 搭建好工程结构
创建一个配置包(config),在里面进行 mybatis 的配置,其中全局配置(sqlMapConfig.xml) 就放在这个包下面。
还有一个 sqlMap 包,这里是放置 sql 的配置文件的 ;
mybatis 的使用 —— 创建 sqlMapCnfig.xml 全局配置文件
在 config 包下面创建创建全局配置文件,全局配置文件的名字是任意的,可随便取名;
<?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>
<!--当和 spring 整合以后,environments 配置将废除-->
<environments default="development">
<environment id="development">
<!--事务管理,暂时有mybatis管-->
<transactionManager type="JDBC"/>
<!--数据源 暂时也由 mybatis 管理,以后都由 spring 来管理-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatisDay01?charset=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
mybatis 的使用 —— 根据用户 id 查询用户
首先在
sqlMap包下面,创建映射文件映射文件的名字,有2种写法:一种是
xxx.xml;另一种是xxxMap.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="test">
<select id="selectBlog" parameterType="int" resultType="xin.ijava.pojo.User">
select * from User where id = #{id}
</select>
</mapper>namespace:名称空间,用来隔离 sql 语句id:是表示映射文件中的sql语句,由于最后sql语句被封装到mappedStatement对象中,因此,id也可以看做是statement对象的id;#{}:mybatis中的占位符 ;#{id}:这里的id是接受输入参数的名字,当输入参数类型是java基本类型的时候,id可以随便取名字。当输入参数类型是pojo时候,名字必须是输入参数的名字;parameterType:输入参数类型 ;resultType:输出结果类型,表示将单条结果映射成对应的java对象类型;不管返回的多条记录还是单条记录,它只关心单条或者多条中的单条返回的是什么类型 ;在
sqlMapCnfig.xml中加载映射文件<!--加载映射文件-->
<mappers>
<!--地址从src包开始写,用斜杠代替-->
<mapper resource="xin/ijava/config/sqlmap/User.xml"/>
</mappers>java 代码编写
package xin.ijava.mybatis; 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 xin.ijava.pojo.User; import java.io.IOException;
import java.io.InputStream; /**
* @author An
*/
public class MybatisTest { @Test
public void findUserByIdTest() throws IOException {
// 1、读取全局配置文件,传入会话工厂,以便创建会话,也可以使用 mybatis 的 Resources.getResourceAsStream("") ;读取
// 参数,都是从src开始写;
// InputStream inputStream = MybatisTest.class.getClassLoader().getResourceAsStream("xin/ijava/config/sqlMapConfig.xml"); InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
// 2、创建会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream) ;
// 3、创建会话
SqlSession sqlSession = factory.openSession() ;
// 4、操作数据库
// selectOne :查询一条记录
User user = sqlSession.selectOne("test.findUserById",1);
// 5、关闭会话
sqlSession.close();
System.out.println(user);
} }
mybatis 的使用 —— 根据用户 name 查询用户(模糊查询 )
配置映射关系文件
<!--模糊查询-->
<!--
${value} :表示拼接字符串,它不加任何的修饰,进行拼接,会引起 sql注入攻击 ;
如果是接受基本类型,则里面的参数名,必须是 value ;
-->
<select id="findUsersByName" parameterType="java.lang.String" resultType="xin.ijava.pojo.User">
SELECT * FROM User where name LIKE '%${value}%'
</select>java测试代码@Test
public void findUsersByName() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = factory.openSession() ;
// selectList :查询出多条记录 ;
List<User> users = sqlSession.selectList("test.findUsersByName","小明") ;
System.out.println(users);
}
mybatis 的使用 —— 插入用户
配置映射关系
<!--插入用户--> <insert id="insertUser" parameterType="xin.ijava.pojo.User">
-- 主键返回
-- keyProperty:表示将主键赋给 pojo 的哪一个属性
-- order:表示该sql 相对于下面的 sql 的执行顺序
-- resultType :返回值类型
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey> INSERT into user(name,sex,birthday,address) VALUES (#{name},#{sex},#{birthday},#{address}) </insert>这里面有个
主键返回问题;我们一般都设置了主键自增长,这样我们插入进去的对象的id,我们是没有赋值的,我们需要将自增长的id赋给对象的id;在
mybatis中,按照上面的方法,可以完成主键返回操作 ;其中主键返回操作,一定要放在insert之后 ;java 测试代码
@Test
public void insertUser() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = factory.openSession() ;
User user = new User();
user.setName("YAZ");
user.setSex("1");
// mybatis 支持java基本类型的转换的
user.setBirthday(new Date());
user.setAddress("苏州 张家港");
sqlSession.insert("test.insertUser",user) ;
// 提交
sqlSession.commit();
sqlSession.close(); System.out.println(user.getId()); // 主键已经被赋值给 User 对象
}
mybatis 的使用 —— 删除用户
配置映射关系
<!--删除用户-->
<delete id="deleteUserById" parameterType="java.lang.Integer">
DELETE FROM user WHERE id = #{id}
</delete>
java 测试代码
@Test
public void deleteUser() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = factory.openSession() ; sqlSession.delete("test.deleteUserById",2) ;
// 提交
sqlSession.commit();
sqlSession.close(); }
mybatis 的使用 —— 更新用户
配置映射关系
<!--更新用户-->
<update id="updateUserById" parameterType="xin.ijava.pojo.User">
UPDATE USER SET name = #{name},sex = #{sex},birthday = #{birthday},address = #{address} WHERE id = #{id}
</update>java 测试代码
@Test
public void updateUserById() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = factory.openSession() ; User user = new User();
user.setId(3);
user.setName("YAZ");
user.setSex("1");
// mybatis 支持java基本类型的转换的
user.setBirthday(new Date());
user.setAddress("苏州 吴侬软语"); sqlSession.update("test.updateUserById",user) ;
// 提交
sqlSession.commit();
sqlSession.close(); }
小结
我们一路写下来,已经发现,mybatis 主要就在于 配置映射关系,自己控制 sql 语句 ;
(三)mybatis 的使用(入门)的更多相关文章
- MyBatis(1)——快速入门
MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- (转) MyBatis(1)——快速入门
MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- (转)MyBatis框架的学习(二)——MyBatis架构与入门
http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- 第三章 Git的入门 - 读书笔记
Android驱动月考3 第三章 Git的入门 - 读书笔记 对于Github,这是全世界最大的开源平台,你可以把你做的项目在这里开源,把你发现的一些新技术在这里开源,向全世界的开发者们分享,大家都彼 ...
- [转]Membership三步曲之入门篇 - Membership基础示例
本文转自:http://www.cnblogs.com/jesse2013/p/membership.html Membership三步曲之入门篇 - Membership基础示例 Members ...
- webpack入坑之旅(三)webpack.config入门
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- java 日志体系(三)log4j从入门到详解
java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...
- Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建
目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...
- ASP.NET 安全系列 Membership三步曲之入门篇 - Jesse Liu
Membership 三步曲 ASP.NET 安全系列 Membership三步曲之入门篇 ASP.NET 安全系列 Membership三步曲之进阶篇 ASP.NET 安全系列 Membership ...
随机推荐
- 泰乐事(Telos)白皮书中文版 <一> 泰乐事项目(未完成)
泰乐事项目 一个可持续发展的去中心化EOSIO网络 EOS系统在设计上为人们带来了令人惊喜的一种实现新经济模式的承诺.然而很不幸,其高度中心化的运营正不断地破坏这种承诺.90%的EOS代币掌握在仅仅1 ...
- windows游戏编程键盘
键盘 首先我们来看一下键盘常用消息 键盘的消息处理过程 键盘消息会有击键消息和字符消息 键盘消息的附加参数 wParam:非系统键的虚拟码 lParam: windows常用虚拟键码及对应的按键
- 关于pl/sql打开后database为空的问题解决办法
前置条件:楼主是在虚拟机里面进行安装oracle和pl/sql的,所以我的安装后,发现我的pl/sql显示的database是空的,当然楼主会检查我的tnsnames.ora是不是配置正确了,但是检查 ...
- java课后实验性问题2
课后作业一:计算组合数 程序设计思想: 从键盘获取组合数,判断是否构成组合数.分别用三种方法计算组合数输出. 程序流程图: import java.util.Scanner; public class ...
- Axure实现提示文本单击显示后自动消失的效果
Axure实现提示文本单击显示后自动消失的效果 方法/步骤 如图所示,框出的部分为提示文本(已经命名为tooltip),希望达到的效果是默认加载时不显示,点击帮助图标后显示,且2秒后自动消失. ...
- Qt数据库编程_基本
QtSql模块提供了一个平台无关且数据库无关的访问SQL数据库的接口. Qt中的每个数据库连接用一个QSqlDatabase对象来表示:Qt使用不同driver来和各种不同数据库的API进行通讯. Q ...
- golang gorm框架的默认时区问题
gorm框架的时区是在连接数据库时设置的, 如下
- Connection
作用: * 获取执行sql语句对象 ** createStatement(): 获取Statement对象 ** prepareStatement(String sql): 获取预处理对象 ** pr ...
- jenkins打完包在哪里
查看控制台输出最后面一行是jar包的位置 [JENKINS] Archiving /var/lib/jenkins/jobs/moven-test/workspace/target/projectA- ...
- iOS-AVFoundation实现二维码(ios7以上,转载)
关于二维码扫描有不少优秀第三方库: ZBar SDK 里面有详细的文档,相应介绍也非常多,如:http://rdcworld-iphone.blogspot.in/2013/03/how-to-use ...