mybatis基于代理dao的CRUD操作
创建mybatis的环境在上一篇就不再写了,数据库等也在上一篇
1 创建pojo 的user表
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2 创建userdao接口
public interface UserDao {
/**
* 查询所有操作
*/
List<User> findAll();
/**
* 保存用户
* @param user
*/
void saveUser(User user);
/**
* 更新用户
* @param user
*/
void updateUser(User user );
/**
* 删除用户
* @param user
*/
void deleteUser(int user);
/**
* 根据id查找
* @param id
* @return
*/
User findById(int id);
/**
* 根据名字模糊查询
* @param username
* @return
*/
List<User> findByName(String username);
/**
* 查询总用户数
* @return
*/
int findTotal();
}
3 创建SqlMapConfig.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>
<!--配合别名 只能配置pojo内的 -->
<typeAliases>
<!--type指定的实体类全限定类名 alias属性指定别名 当指定了别名就不再区分大小写
<typeAlias type="com.jty.pojo.User" alias="user"></typeAlias>
-->
<!-- 用于指定配置别名的包, 当指定后,该包下的实体类都会注册别名,并且类名就是别名,也不区分大小写-->
<package name="com.jty.pojo"/><package name=""/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<!-- 配置连接池 -->
<dataSource type="POOLED">
<!-- 配置连接数据库的四个基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 用于指定dao接口所在的包 当指定后便不需要再写mapper resource 或者 class了
<mapper resource="com/jty/dao/UserDao.xml" />
-->
<package name="com.jty.dao"/>
</mappers>
</configuration>
4 创建userdao.xml 用于处理class中的接口
<?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="com.jty.dao.UserDao">
<!-- 配置查询所有 resultType 将查询结果封装到user对象中-->
<select id="findAll" resultType="User">
select * from user
</select>
<!--保存用户 -->
<insert id="saveUser" parameterType="User">
insert into user(username,address,sex,birthday) value(#{username},#{address},#{sex},#{birthday});
</insert>
<!--更新用户 -->
<update id="updateUser" parameterType="User">
update user set username =#{username},address =#{address},sex =#{sex},birthday=#{birthday}where id=#{id}
</update>
<!--删除用户 -->
<delete id="deleteUser" parameterType="User">
delete from user where id = #{id};
</delete>
<!--查询用户 -->
<select id="findById" resultType="User" >
select * from user where id = #{id}
</select>
<!--根据名称模糊查询用户 -->
<select id="findByName" parameterType="string" resultType="User" >
select * from user where username like #{name}
</select>
<!--查询用户的总记录条数 -->
<select id="findTotal" resultType="int" >
select count(id) from user
</select>
</mapper>
5 创建测试类进行测试
public class MybatisTest {
/**
* @param args
*/
private InputStream in;
private SqlSession session;
private UserDao userDao;
@Before
public void init() throws IOException {
//1 读取配置文件 resources 的包应为import org.apache.ibatis.io.Resources;
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2 创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3 使用工厂生产SqlSession对象
session = factory.openSession();
//4 使用SqlSession创建Dao接口的代理对象
userDao = session.getMapper(UserDao.class);
}
@After
public void destory() throws IOException {
session.commit();
session.close();
in.close();
}
/**
* 查询所有
*/
@Test
public void testfindAll() {
//5 使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users
) {
System.out.println(user);
}
}
/**
* 插入数据
*/
@Test
public void testSave() {
User user = new User();
user.setUsername("狗子");
user.setAddress("日本");
user.setSex("男");
user.setBirthday(new Date());
//5 执行保存方法
userDao.saveUser(user);
}
/**
* 更新数据
*/
@Test
public void testUpdate() {
User user = new User();
user.setId(43);
user.setUsername("魏无忌");
user.setAddress("美国");
user.setSex("男");
user.setBirthday(new Date());
//5 执行保存方法
userDao.updateUser(user);
}
/**
* 删除用户
*/
@Test
public void testDelete() {
userDao.deleteUser(48);
}
/**
* 根据id查找
*/
@Test
public void testFindById() {
User user = userDao.findById(49);
System.out.println(user);
}
/**
* 模糊查询
*/
@Test
public void testFindByName() {
List<User> users = userDao.findByName("%孙%");
for (User user:users
) {
System.out.println(user);
}
}
/**
* 查询记录总条数
*/
@Test
public void testFindTotal() {
int count = userDao.findTotal();
System.out.println(count);
}
}