基于代理实现CURD
根据ID查询
在持久层接口中添加findById方法
public User findById(Integer id);
在用户的映射配置文件中配置
<select id="findById" resultType="com.jd.domain.User">
select id,userName as userName ,birthday as birthday,sex as sex,
address as address from user WHERE yn=1 and id=#{id}
</select>
细节:
resultType属性:
用于指定结果集的类型。
parameterType属性:
用于指定传入参数的类型。
sql语句中使用#{}字符: 它代表占位符,相当于原来jdbc的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。
{}中内容的写法: 由于数据类型是基本类型,所以此处可以随意写。
在测试类添加测试
/**
* 根据id查询
* @throws Exception
*/
@Test
public void test1() throws Exception {
//1、读取配置文件
InputStream in=Resources.getResourceAsStream("SqlMapConfig.xml");
//2、创建SqlSessionFactory的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3、使用构建者创建工厂对象SqlSessionFactory
SqlSessionFactory factory= builder.build(in);
//4、使用SqlSessionFactory创建SqlSession
SqlSession session=factory.openSession();
//5、使用SqlSession创建dao接口的代理对象
UserMapper userDao =session.getMapper(UserMapper.class);
//6、使用代理对象执行查询方法
User user =userDao.findById(2);
System.out.println(user);
//7、释放资源
session.close();
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
保存操作
在持久层接口中添加新增方法
/**
* 保存操作
*/
public int save(User user);
在用户的映射配置文件中配置
<insert id="save" parameterType="com.jd.domain.User">
insert into user(userName,address,sex,birthday) values(#{userName},#{address},#{sex},#{birthday})
</insert>
添加测试类中的测试方法
/**
* 保存操作
*/
@Test
public void saveTest() throws Exception{
InputStream in=Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
SqlSession session=factory.openSession();
UserMapper userMapper=session.getMapper(UserMapper.class);
User user = new User();
user.setBirthday(new Date());
user.setUserName("hhh");
user.setSex("nna");
user.setAddress("di");
try {
userMapper.save(user);
}catch (Exception e){
System.out.println("保存失败");
}
session.commit();
session.close();
in.close();
}
用户更新
在持久层接口中添加更新方法
/**
* 修改操作
*/
public int update(User user);
在用户的映射配置文件中配置
<update id="update" parameterType="com.jd.domain.User">
update user set userName=#{userName},address=#{address},sex=#{sex},birthday=#{birthday}
where id=#{id}
</update>
加入更新的测试方法
/**
* 修改操作
*/
@Test
public void updateTest() throws Exception{
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory =builder.build(in);
SqlSession session =factory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = new User();
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("修改地址");
user.setUserName("修改用户名");
user.setId(10);
try{
int res = userMapper.update(user);
if (res==1){
System.out.println("更新数据成功");
}
}catch (Exception e){
System.out.println("更新数据失败");
}
session.commit();
session.close();
in.close();
}
用户删除
在持久层接口中添加删除方法
/**
* 删除操作
*/
public int delete(Integer id);
在用户的映射配置文件中配置
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
加入删除的测试方法
/**
* 删除操作
*/
@Test
public void deleteTest() throws Exception{
InputStream in=Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
SqlSession session = factory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
try {
int res = userMapper.delete(8);
if (res==1){
System.out.println("删除成功");
}
}catch (Exception e){
System.out.println("删除失败");
}
session.commit();
session.close();
in.close();
}