1.创建一个maven的mybatis项目,链接mybatis入门。
2.select
2.1 在UserDao接口中添加通过ID获取user的方法。
package dao;
import pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
// insert
User getUserById(int id);
}
2.2 在usermapper.xml中添加insert语句。
<?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="dao.UserDao">
<select id="getUserList" resultType="pojo.User">
select * from USER
</select>
<select id="getUserById" parameterType="int" resultType="pojo.User">
select * from USER where id=#{id};
</select>
</mapper>
2.3 在test中的UserDaoTest中添加insert的测试方法。
import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserDaoTest {
@Test
public void test() {
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
List<User> users=userDao.getUserList();
for (User user:users) {
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void insertTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
for (int i=1;i<=3;i++) {
User user=userDao.getUserById(i);
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.4 执行结果
3.update
3.1 更改pojo包下的User类,在其中添加有参构造方法和无参构造方法。
package pojo;
public class User {
private int id;
private String name;
private String password;
public User(){
}
public User(int id,String name,String password){
this.id=id;
this.name=name;
this.password=password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) { this.name = name; }
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.2 在UserDao接口中添加updateuser方法。
package dao;
import pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
// insert
User getUserById(int id);
// update
void updateUser(User user);
}
3.3 在usermapper.xml中添加update语句。
<?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="dao.UserDao">
<select id="getUserList" resultType="pojo.User">
select * from USER
</select>
<select id="getUserById" parameterType="int" resultType="pojo.User">
select * from USER where id=#{id};
</select>
<update id="updateUser" parameterType="pojo.User" >
update user set name=#{name},password=#{password} where id=#{id};
</update>
</mapper>
3.4 在test中添加测试方法
import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserDaoTest {
@Test
public void test() {
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
List<User> users=userDao.getUserList();
for (User user:users) {
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void insertTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
for (int i=1;i<=3;i++) {
User user=userDao.getUserById(i);
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void updateTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=new User(1,"aaa","bbb");
userDao.updateUser(user);
session.commit();
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.5 注意此时会出现一个异常
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.sql.SQLException: Could not retrieve transation read-only status server
### The error may involve dao.UserDao.updateUser-Inline
### The error occurred while setting parameters
### SQL: update user set name=?,password=? where id=?;
### Cause: java.sql.SQLException: Could not retrieve transation read-only status server
原因是我之前使用后的mysql链接版本是5.1.32,但是实际的mysql版本是8.0.15。
解决方法是:将依赖改成与mysql相同的版本。
此时又会出现问题,执行代码后发现控制台输出
所以还需要将mybatis-config.xml中的driver修改一下
3.6 此时数据库中数据为
4. insert
4.1 在UserDao接口中添加addUser方法
package dao;
import pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
// insert
User getUserById(int id);
// update
void updateUser(User user);
// insert
void addUser(User user);
}
4.2 在UserMapper.xml中添加insert语句
<?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="dao.UserDao">
<select id="getUserList" resultType="pojo.User">
select * from USER
</select>
<select id="getUserById" parameterType="int" resultType="pojo.User">
select * from USER where id=#{id}
</select>
<update id="updateUser" parameterType="pojo.User" >
update user set name=#{name},password=#{password} where id=#{id}
</update>
<insert id="addUser" parameterType="pojo.User">
insert into user (id, name, password) values (#{id}, #{name}, #{password});
</insert>
</mapper>
4.3 在test中添加测试方法
import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserDaoTest {
@Test
public void test() {
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
List<User> users=userDao.getUserList();
for (User user:users) {
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void insertTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
for (int i=1;i<=3;i++) {
User user=userDao.getUserById(i);
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void updateTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=new User(1,"aaa","bbb");
userDao.updateUser(user);
session.commit();
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void addTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=new User(4,"aaa","bbb");
userDao.addUser(user);
session.commit();
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.4 执行代码之后发现表中多了一条数据
5. delete
5.1 在UserDao接口中添加deleteUser方法
package dao;
import pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
// insert
User getUserById(int id);
// update
void updateUser(User user);
// insert
void addUser(User user);
// delete
void deleteUser(int id);
}
5.2 在UserMapper.xml中添加delete语句
<?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="dao.UserDao">
<select id="getUserList" resultType="pojo.User">
select * from USER
</select>
<select id="getUserById" parameterType="int" resultType="pojo.User">
select * from USER where id=#{id}
</select>
<update id="updateUser" parameterType="pojo.User" >
update user set name=#{name},password=#{password} where id=#{id}
</update>
<insert id="addUser" parameterType="pojo.User">
insert into user (id, name, password) values (#{id}, #{name}, #{password});
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id};
</delete>
</mapper>
5.3 在test中添加delete测试方法
import dao.UserDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserDaoTest {
@Test
public void test() {
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
List<User> users=userDao.getUserList();
for (User user:users) {
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void insertTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
for (int i=1;i<=3;i++) {
User user=userDao.getUserById(i);
System.out.print(user.getId());
System.out.print(" ");
System.out.print(user.getName());
System.out.print(" ");
System.out.print(user.getPassword());
System.out.println();
}
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void updateTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=new User(1,"aaa","bbb");
userDao.updateUser(user);
session.commit();
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void addTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=new User(4,"aaa","bbb");
userDao.addUser(user);
session.commit();
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void deleteTest(){
try {
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(is);
SqlSession session=factory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
userDao.deleteUser(4);
session.commit();
session.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5.4 执行代码后发现少了最后一条数据