主要目标:对数据库进行CRUD的操作
1.javaBean User
package cn.itcast.domain;
import java.util.Date;
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
//省略getter setter方法
private String address;
}
2.UserDao 主要定义接口
package cn.itcast.dao;
import java.util.List;
import cn.itcast.domain.User;
public interface UserDao {
public User findUserById(int id);//根据用户id查询数据库
public List<User> findUserByName(String name);//模糊查询
public void deleteUser(int id);//根据id删除用户
public void updateUser(User user);//更新用户
public void inserUser(User user);//向数据库中插入一条数据
}
3.UserDaoImpl 实现上述定义的接口
--对于创建SqlSessionFactory用来创建SqlSession的工厂类进行构造方法注入
其中sqlSession.方法中的sqlSession.selectOne("test.findById", id); 第一个参数是user.xml中的命名空间+对应的id值
package cn.itcast.dao.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
public class UserDaoImpl implements UserDao {
//必须注入SqlSessionFactory
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory=sqlSessionFactory;
}
public User findUserById(int id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user=sqlSession.selectOne("test.findById", id);
sqlSession.close();
return user;
}
public List<User> findUserByName(String name) {
SqlSession sqlSession=sqlSessionFactory.openSession();
List<User> users = sqlSession.selectList("test.findUserByName", name);
sqlSession.close();
return users;
}
public void updateUser(User user) {
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession.update("test.updateUser", user);
sqlSession.commit();
sqlSession.close();
}
public void deleteUser(int id) {
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUser", id);
sqlSession.commit();
sqlSession.close();
}
public void inserUser(User user) {
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession.insert("test.insertUser", user);
sqlSession.commit();
sqlSession.close();
}
}
4.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">
<mapper namespace="test">
<!-- 在映射文件中配置很多sql语句 -->
<!-- 需求:通过id查询用户表的记录 -->
<!-- 通过select执行数据库查询 -->
<!--
id:标识 映射文件中的sql
将sql语句封装到mappedStatement对象中,因此将id称为statement的id
parameterType:指定输入参数的类型,这里指定int类型
#{} 标识一个占位符
#{id}其中的id标识接受输入的参数,参数名称就是id,如果输入类型参数是简单类型#{id}的id可以是value或者其他任意值
resultType:指定sql输出结果的所映射的java对象类型,select 指定resultType将表中的单条记录封装成一个java对象
-->
<select id="findById" parameterType="int" resultType="cn.itcast.domain.User">
select * from user where id=#{id}
</select>
<!--根据用户名模糊查询 可以返回多条记录 -->
<!-- resultType:指定就是单条记录所映射的java对象类型 -->
<!--
${}:表示拼接sql串,将接受到参数的内容不加任何修饰拼接在sql中
使用${}拼接sql,引起sql注入
${value}:接受输入参数的内容,如果传入类型是简单类型,${}中只能使用value
-->
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.domain.User">
select * from user where username like "%${value}%"
</select>
<update id="updateUser" parameterType="cn.itcast.domain.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<insert id="insertUser" parameterType="cn.itcast.domain.User">
insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address});
</insert>
</mapper>
测试数据
package cn.itcast.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.domain.User;
public class UserDaoImplTest {
private static SqlSessionFactory sqlSessionFactory;
static InputStream in;
static{
//mybatis的配置文件
String resource="SqlMapConfig.xml";
try {
//得到配置文件流
in = Resources.getResourceAsStream(resource);
} catch (IOException e) {
throw new RuntimeException();
}
//1.创建回话工厂,传入的配置文件信息
sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
}
@Test
public void testFindUserById() {
UserDao userDao=new UserDaoImpl(sqlSessionFactory);
User user = userDao.findUserById(1);
System.out.println(user);
}
@Test
public void testFindUserByName() {
}
@Test
public void testUpdateUser() {
}
@Test
public void testDeleteUser() {
UserDao userDao=new UserDaoImpl(sqlSessionFactory);
userDao.deleteUser(1);
}
@Test
public void testInserUser() {
UserDao userDao=new UserDaoImpl(sqlSessionFactory);
User user=new User();
user.setUsername("程崇树");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("广西北海");
userDao.inserUser(user);
}
}