DAO接口参数映射到SQL语句:parameterType
数据库查询结果封装到POJO:resultType
一 XML配置文件方式
MyBatis使用流程:
- 配置主配置文件(数据库连接信息、映射配置文件位置信息)
- 创建实体类User
- 创建DAO接口(设置要执行的数据库操作CRUD)
- 配置映射配置文件(配置实现CRUD的sql语句)
- 创建测试类Test(读取配置文件、创建dao代理对象、测试CRUD方法)
DAO接口不用手动创建实现类,接口的参数作为SQL语句参数的来源,接口的返回值是SQL语句执行结果封装的目标
1.1 基本CRUD
1.1.1 DAO接口
定义select、save、update、delete方法
public interface IUserDao{
//查找所有用户
List<User> findAll();
void saveUser(User user);
//更新用户
void updateUser(User user);
//根据id删除用户
void deleteUser(Integer userId);
//根据id查询用户信息
User findById(Integer userId);
//根据名称模糊查询用户信息
List<User> findByName(String username);
//获取总用户数,使用SQL中的聚合函数
int findTotal();
}
1.1.2 映射配置文件(SQL语句)
//查询所有
<select id="findAlll" resultType="com.iteheima.doamin.User">
select * from user;
</select>
//增加数据
<insert id="insertUser" parameterType="com.itheima.domain.User">
insert into user(username,address,sex,birthday) values(#{
username},#{
address},#{
sex},#{
birthday});
</insert>
//更新数据
<update id="updateUser" parameterType="com.itheima.domain.User">
update user set username=#{
username},address=#{
address},sex=#{
sex},birthday#{
birthday} where id=#{
id};
</update>
//删除数据
<delete id="deleteUser" parameterType="java.lang.Integer">
//当参数只有一个,且为基本类型或基本类型包装类时,sql语句中参数名可以随便写,如这里为uid;patameterType也可以随便写,这里还可以写成int/INT/integer/INTEGER/java.lang.Integer,只要表示是int类型即可;
delete from user where id=#{
uid}
</delete>
//根据ID查询用户
<select id="findById" parameterType="java.lang.Integer" resultType="com.iteheima.doamin.User">
select * from user where id=#{
uid};
</select>
//根据名称模糊查询用户
<select id="findByName" parameterType="string" resultType="com.iteheima.doamin.User">
//注意:SQL模糊查询通配符是%,但是这里参数name没法写成%王%的形式,所以应在调用函数的地方,直接将name定义为%王%这种形式后传过来
select * from user where username like #{
name};
</select>
//根据名称模糊查询用户
<select id="findByName" parameterType="string" resultType="com.iteheima.doamin.User">
//注意:SQL模糊查询通配符是%,但是这里参数name没法写成%王%的形式,所以应在调用函数的地方,直接将name定义为%王%这种形式后传过来
select * from user where username like #{
name};
</select>
//获取用户总数
<select id="findTotal" resultType="java.lang.Integer">
select count(id) from user;
</select>
1.1.3 调用
public class MybatisTest{
private InputStream in;
private SqlSession sqlsession;
private IUserDao userDao;
@Before //用于在测试方法执行之前执行
public void init() throws Exception{
//1.读取配置文件
in=Resources.getResourcesAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactory
SqlSessionFactory factory=new SqlSessionFactoryBuilder().buikd(in);
//3.获取SqlSession对象
sqlSession=factory.openSession();
//4.获取dao的代理对象
userDao=sqlSession.getMapper(IUserDao.class);
}
@After //用于在测试方法执行之后执行
publuc void destroy() throws Exception{
//提交事务
sqlSession.commit()
//释放资源
sqlSession.close()