- jdk1.8
- mysql5.7
- maven3.6.1
- idea
- maven仓库
org.mybatis mybatis 3.4.6
-
GitHub release发行版
-
SSM都是有配置文件的,对照官网学习 mybatis官网
- 搭建环境
//创建一个父工程导入依赖,mybatis,mysql-connector.junitmysql mysql-connector-java 5.1.47 org.mybatis mybatis 3.4.6 junit junit 4.12
-
在父工程里面新建一个maven的module,配置核心资源配置文件pom.xml
-
在官方文档找到配置语句,resource下面创建mybatis-config.xml文件,复制进去,修改好driver,url…
- 利用官方文档写一个mybatis的工具类
public class myBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
- 编写实体类
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
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 getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
- 编写操作数据库的DAO层,包括接口和实现接口的 xml 文件
//要实现的接口
public interface UserDao {
List getUserList();
}
//mapper.xml文件,相当于用配置的方式来实现接口
select * from mybatis.user
- 很重要的一步,在.config里面配置
- junit编写测试类
public class UserDaoTest {
@Test
public void test() {
SqlSession sqlSession= myBatisUtil.getSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List list=mapper.getUserList();
for (User user : list) {
System.out.println(user);
}
}
}
- 出现的问题
- could not find xx.config 原因是在pom.xml下面写的资源过滤有问题
下面这段加上就会出问题 //-------------- src/main/java ***.xml true //------------- src/main/resources ***.xml true
-
org.apache.ibatis.exceptions.PersistenceException:
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
这个问题只需要把useSSL=true改成 useSSL=false就好了CRUD
-
对数据库mybatis.user的增删改查
-
注意的地方
-
sqlsession用完需要关闭 sqlsession.close()
-
增删改的操作都需要提交事务sqlsession.commit()
-
//UserMapper接口的编写
public interface UserMapper {
//查询全部用户
List getUserList();
//查询单个用户
User getUserById(int id);
//增加一个用户
int addUser(User user);
//修改用户信息
int updateUser(User user);
//删除一个用户
int deleteUser(int id);
}
//对应UserMapper.xml配置文件的编写
//测试类编写
public class UserDaoTest {
@Test
public void test() {
SqlSession sqlSession= myBatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List list=mapper.getUserList();
for (User user : list) {
System.out.println(user);
}
}
@Test
public void getUserById() {
SqlSession sqlSession=myBatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(3);
System.out.println(userById);
sqlSession.close();
}
@Test
public void addUer() {
SqlSession sqlSession = myBatisUtil.getSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int res=userMapper.addUser(new User(4, "xpc", "00000000"));
System.out.println("插入成功"+res);
//增删改需要提交事务
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser() {
SqlSession sqlSession = myBatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res=mapper.updateUser(new User(2, "zhangsan", "aaa"));
if (res>0) {
System.out.println("修改成功"+res);
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser() {
SqlSession sqlSession = myBatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.deleteUser(2);
if (res > 0) {
System.out.println("删除成功" + res);
}
sqlSession.commit();
sqlSession.close();
}
}



