需求:

1.查询一个用户

2.查询多个用户(List)



Mybatis开发步骤:

编写SqlMapConfig.xml配置文件(配置数据源和mapper映射文件)


编写mapper.xml映射文件,在里面编写statement(包括sql语句,输入和输出,参数类型)


编写程序

获取SqlSessionFactory

通过SqlSessionFactory获取SqlSession

通过SqlSession操作数据库(调用上面定义的statement)


第一步:在config/SqlMapConfig.xml下进行全局配置文件(注意头的信息)


mybatis 第一个程序---用户查询_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>

<!-- 配置数据源 -->
<!-- 和spring整合后 environments配置将废除-->
<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=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>

<!-- 配置mapper映射文件 -->
<mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers>

</configuration>


加入config/log4j.properties可以在控制台上打印sql语句出来




第二步:创建实体类User.java




第三步:config/sqlmap/User.xml下配置User.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">

<!-- namespace命名空间 :作为一标示的作用,但是如果使用mapper动态代理方法,这里就需要配置mapper接口地址-->
<mapper namespace="test">

<!--

根据用户的ID查询一条记录(返回单条记录)


select标签表示sql查询,内容会封装到Mapped Statement中,
可以将这个select标签称为一个Statement
id属性:Statement的唯一标识

#{}:表示一个占位符,可以避免sql注入
${}:表示一个拼接符

parameterType:表示输入的类型,就是占位符要输入什么类型
resultType:表示输出的结果集的类型,select查询的字段名和resultType属性名一致,才能映射成功
#{id}:id表示parameter输入参数的变量

-->
<select id="findUserById" parameterType="int" resultType="com.mo.pojo.User">
SELECT * FROM USER WHERE id = #{id}
</select>

<!--
根据名字查询用户列表(返回List集合)

不管返回的结果是几条,resultType都是指定单条记录映射java对象的类型

${}:表示sql拼接符,相当于sql字符串的拼接,无法避免sql注入
${value}:value表示parameter输入参数的变量,使用${},变量名必须使用value
直接将value拼接到sql中,value不作任何的修饰

'%${value}%' : 可以这样使用修饰
客户端输入 张
sql会拼接为 %张%

-->
<select id="findUserListByName" parameterType="String" resultType="com.mo.pojo.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>

</mapper>



第四步:测试单元



package com.mo;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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.mo.pojo.User;

public class MybatisTest {

@Test
public void test() throws IOException{
//1.加载配置文件
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);

//2.根据配置文件创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//3.根据SqlSessionFactory创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();


//4.查询返回多条
/**
* 通过sqlSession的API对数据库进行操作
* 第一个参数是statement:指定mapper映射文件中statement的id
* 指定的时候加上statement所属的空间名称
* 第二个就是给参数赋值
*
* selectOne返回的是单条的记录,如果select返回多条记录(list集合),selectOne会报错
*
* 返回值得类型就是映射文件中的resultType
*/
User user = sqlSession.selectOne("test.findUserById", 1);


List<User> list = sqlSession.selectList("test.findUserListByName","张");

System.out.println(list.size());

System.out.println(user);

//5.关闭sqlSession
sqlSession.close();
}
}