前言
使用注解方式来实现MyBatis的操作时,只需要在接口类上写注解,而不需要mapper文件。
将MyBatis和servlet整合,实现在html页面上的增删查改。项目其他通用配置可参照MyBatis入门(一)。
执行过程
项目目录结构如下图:
1 . 编写全局配置文件—SqlConfig.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>
<properties resource="jdbc.properties"></properties>
<!-- DEV指代码开发环境-->
<environments default="dev">
<environment id="dev">
<!-- Mybatis事务管理器-->
<transactionManager type="JDBC"></transactionManager>
<!-- 使用连接池时,数据源类型为POOLED-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 映射接口,注意属性是class-->
<mappers>
<mapper class="com.mb5.mapper.UserMapper"></mapper>
</mappers>
</configuration>
2 . 创建UserMapper接口,实现具体操作。定义User类,四个属性(userId,username,password,email)。
//用户接口
public interface UserMapper {
@Select("select * from user")
List<User> queryAll();
@Delete("delete from user where userId=#{userId}")
void deleteUserById(int id);
@Insert("insert into user(username,password,email) values(#{username},#{password},#{email})")
void insertUser(User user);
@Update("update user set username=#{username},password=#{password},email=#{email} where userId=#{userId}")
void update(User user);
}
新建UserService类,实现业务层对接口的调用。
public interface UserService {
List<User> queryAllSer() throws Exception;
void deleteUserByIdSer(int id) throws Exception;
void insertUserSer(User user) throws Exception;
void updateSer(User user) throws Exception;
}
3 . 通过ApplicationContextUtil工具类加载全局配置文件,产生SqlSessionFactory,继而产生SqlSession。
public class ApplicationContextUtil {
private static ApplicationContext applicationContext = null;
private ApplicationContextUtil(){}
public static ApplicationContext backApplicationContext(String path){
applicationContext = new ClassPathXmlApplicationContext(path);
return applicationContext;
}
}
BackSession工具类返回SqlSession对象,用来进行数据库的具体操作。
//调用ApplicationContextUtil工具类
public class BackSession {
public static SqlSession getSession(String config) throws IOException {
InputStream inputStream = Resources.getResourceAsStream(config);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sessionFactory.openSession(true);
}
}
4 . 通过SqlSession把映射接口类中的具体操作传递过来,调用mappedStatement操作数据库,将结果返回到具体的对象上。
//实现UserService接口,调用BackSession工具类
public class UserServiceImpl implements UserService {
@Override
public List<User> queryAllSer() throws IOException {
SqlSession session = BackSession.getSessionByReader("SqlConfig.xml");
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> list = mapper.queryAll();
return list;
}
@Override
public void deleteUserByIdSer(int id) throws IOException {
SqlSession session = BackSession.getSession("SqlConfig.xml");
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.deleteUserById(id);
}
@Override
public void insertUserSer(User user) throws IOException {
SqlSession session = BackSession.getSession("SqlConfig.xml");
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.insertUser(user);
}
@Override
public void updateSer(User user) throws IOException {
SqlSession session = BackSession.getSession("SqlConfig.xml");
UserMapper mapper = session.getMapper(UserMapper.class);
mapper.update(user);
}
}
5 . 与Web整合,新建UserServlet类,交互式地浏览和修改数据。
限于篇幅,只展示部分页面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试增删查改</title>
</head>
<body>
<h1>用户管理系统平台</h1>
<a href="UserServlet?do=select">查询所有用户</a>
<a href="add.html">添加用户信息</a>
<a href="update.html">修改用户信息</a>
<!--通过弹窗获取要删除的id值-->
<button onclick="myFunction()">点我删除用户信息</button>
<p id="demo" name="userId"></p>
<script>
function myFunction(){
var x;
var person=prompt("请输入你的账号","");
if (person!=null && person!=""){
window.location.href = "UserServlet?do=delete&id=" + person;
}
}
</script>
</body>
</html>
测试查询全部方法
控制台输出:
小结
如果需要读取java目录下的xml文件,项目可能会报错。因为idea不会编译src的java目录的xml文件,所以需要在pom.xml文件中添加如下代码。
<build>
...
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
需要其他解决方式可参考------>解决maven项目无法读取src/main/java目录下面的配置文件问题