Mybatis本是aapache的一个开源项目ibatis 。
Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行了封装,使开发者只关注于Sql本身,而不需要花费精力去注册驱动,创建链接,创建statement,手动设置参数,结果数据类型封装等操作繁杂的操作。
操作步骤
1.创建po类
2.创建全局配置文件sqlMapConfig
<?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>
<!-- 配置mybatis的环境信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="映射文件名"></mapper>
</mappers>
</configuration>
3.编写映射文件(映射文件的创建需要添加约束头)
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
4.在SqlMapConfig全局配置文件中加载映射文件
5、 编写测试程序,即编写Java代码,连接并操作数据库。
思路:
a) 读取配置文件;
b) 通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。
c) 通过SqlSessionFactory创建SqlSession。
d) 调用SqlSession的操作数据库方法。
e) 关闭SqlSession
添加用户
(1) 基本的添加
<!-- mybatis的入参只能有一个,这回是个引用类型的 -->
<!-- 插入的值的占位符号,#{},里面是插入对象(入参)的对应的属性名称,采用的是对象的OGNL表达式的写法-->
<insert id="insertUser1" parameterType="com.aishang.domain.User">
insert into user(username,password,name,email,phone,addr,state)
values(#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
</insert>
(2) 添加用户后返回主键 -- 之主键自增
<insert id="insertUser2" parameterType="com.aishang.domain.User">
<!-- selectKey:查询主键,在标签内需要输入查询主键的sql -->
<!-- keyProperty:查询出来的主键值怎么返回?"User"类中"uid"列用来容纳查询出来的生成的主键的值,此配置指明在实体类中用来容纳查询出的主键的属性名 -->
<!-- resultType:查询结果的类型 -->
<!-- order:指定查询主键的sql和insert语句的执行顺序,相对于insert语句来说的,值:
BEFORE: 如果是oracle数据库的话,不是主键自增机制,而是序列机制,
需要先生成一个序列,拿到序列后再执行插入,因此采用的是order="BEFORE"
如果是UUID,也需要先生成一个UUID,再执行插入,也采用order="BEFORE"
AFTER:mysql中,采用自增主键策略 在insert的时候产生主键,所以在执行完insert之后,再来获取生成的主键,因而在这里配置,order="AFTER"
-->
<!-- LAST_INSERT_ID():该函数是mysql函数,针对自增主键来获取主键的id,必须配合insert语句一起使用-->
<selectKey keyProperty="uid" resultType="int" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,password,name,email,phone,addr,state)
values(#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
</insert>
(3) 添加用户后返回主键 -- 之UUID
<insert id="insertUser3" parameterType="com.aishang.domain.User">
<!-- UUDI():该函数是mysql函数,生成一个32位随机不重复的数据-->
<selectKey keyProperty="uid" resultType="java.lang.String" order="BEFORE">
select UUDI()
</selectKey>
<!-- uid不是自增了,也需要插入进去,采用的值是上一步 select UUDI()的结果,已经封装到了User对象的uid属性了-->
insert into user(uid,username,password,name,email,phone,addr,state)
values(#{uid},#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
</insert>
(4) 添加用户后返回主键 -- 之Oracle序列
<insert id="insertUser4" parameterType="com.aishang.domain.User">
<!-- sequence:是Oracle主键生成策略-->
<selectKey keyProperty="uid" resultType="int" order="BEFORE">
select seq.nextval() from dual
</selectKey>
<!-- uid不是自增了,也需要插入进去,采用的值是上一步 select UUDI()的结果,已经封装到了User对象的uid属性了-->
insert into user(uid,username,password,name,email,phone,addr,state)
values(#{uid},#{username},#{password},#{name},#{email},#{phone},#{addr},#{state})
</insert>
测试方法
@Test
public void fun(){
//拿到全局配置文件路径
String resource = "sqlMapConfig.xml" ;
InputStream inputStream = Resource.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new sqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById", 2);
System.out.println(user);
//关闭资源
sqlSession.close();
}
网友评论