mybatis基於代理dao的CRUD操作
阿新 • • 發佈:2020-12-22
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);
}
}