1.自定义接口,定义相关的业务方法
1.1 数据表
1.2 根据数据表,创建了我定义了一个User的实体类,
package org.example.auto;
public class User {
private int id;
private String username;
private String psw;
private String gender;
private String addr;
public User(){}
public User( String username, String psw, String gender, String addr) {
this.username = username;
this.psw = psw;
this.gender = gender;
this.addr = addr;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", psw='" + psw + '\'' +
", gender='" + gender + '\'' +
", addr='" + addr + '\'' +
'}';
}
}
1.3 然后创建一个UserRepository的接口,业务是实现数据库的增删改查
public interface UserRepository {
//定义到执行的数据库方法
public int save(User user); //插入数据
public int update(User user); //更新数据
public int deleteById(int id); //删除数据
public List<User> findAll(); //查找所有数据
public User findById(int id); //根据id查找数据
}
2.创建对应的Mapper.xml
- 创建对应的Mapper.xml,定义接口方法对应的Sql语句,
- 这个接口创建之后,mybatis会自己创建实现类
- eg:上面创建了UserRepository接口,这里就要创建对应的UserRepository.xml
下面是要对应的规则:
大概得意思就是这样:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.repository.UserRepository">
<!-- public int save(User user);-->
<insert id="save" parameterType="org.example.auto.User">
INSERT INTO tb_user(username,psw,gender,addr)VALUES(#{username},#{psw},#{gender},#{addr});
</insert>
<!-- public int update(User user);-->
<update id="update" parameterType="org.example.auto.User">
update tb_user set username=#{username},psw=#{psw},gender=#{gender},addr=#{addr} where id=#{id};
</update>
<!-- public int deleteById(int id);-->
<delete id="deleteById" parameterType="int">
delete from tb_user where id=#{id};
</delete>
<!-- public List<User> findAll();-->
<select id="findAll" resultType="org.example.auto.User">
select * from tb_user;
</select>
<!-- public User findById(int id);-->
<select id="findById" parameterType="int" >
select * from tb_user where id=#{id};
</select>
</mapper>
3.创建test类
1.先创建sqlSession(具体图解看我的第一篇mybatis入门),
2.然后通过获取实现接口的代理对象,
UserRepository UserRepositoryMapper = sqlSession.getMapper(UserRepository.class)
3.参数是创建的对象接口类,
通过UserRepositoryMapper就可以实现UserRepositoryMapper的方法,实现增删改查。
4.!!!!!注意:增删改对数据库的数据发生改变,记得提交sqlSession.commit();不然数据库查询不到变化
public class test02 {
public static void main(String[] args) throws IOException {
String res = "config.xml";
InputStream inputStream= test02.class.getClassLoader().getResourceAsStream(res);
SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
//获取实现接口的代理对象
UserRepository UserRepositoryMapper = sqlSession.getMapper(UserRepository.class);
//查询
List<User> all = UserRepositoryMapper.findAll();
for(User user:all){
System.out.println(user);
}
//添加
// username="老牛",psw="789",gender="男",addr="上海" WHERE id=15;
// User user=new User("老六","888","男","上海");
// UserRepositoryMapper.save(user);
// sqlSession.commit();
//通过id查询
User byId = UserRepositoryMapper.findById(13);
System.out.println(byId);
//通过id删除数据
int i = UserRepositoryMapper.deleteById(14);
System.out.println(i+"删除成功!");
sqlSession.commit();
//修改值
User byId02 = UserRepositoryMapper.findById(17);
// User user=new User();
byId02.setUsername("塔斯汀");
byId02.setGender("女");
byId02.setAddr("广州");
byId02.setPsw("123123");
int update = UserRepositoryMapper.update(byId02);
System.out.println(update);
sqlSession.commit();
System.out.println(UserRepositoryMapper.findById(17));
sqlSession.close();
}
}