1.什么是mybatis?
MyBatis是一款优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
2.安装插件MyBatisX
这个插件可以直接让用户在写接口那里跳转到xml对应的文件里
3.在pom.xml里导入包坐标
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.22</version>
</dependency>
4.编写pojo的对应类
public class User {
private Integer id;
private String username;
private String password;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
5.编写对应的接口
#表示用preparedStatement实现,{}用来指定参数
public interface UserMapper {
/**
* 通过用户名和密码查询用户
*/
@Select("SELECT * FROM tb_user WHERE username = #{username} AND PASSWORD= #{password}")
User select(@Param("username") String username, @Param("password") String password);
/**
* 通过用户名查询用户是否存在
*/
@Select("SELECT * FROM tb_user WHERE username = #{username}")
User selectByUsername(String username);
/**
* 添加用户
*/
@Insert("insert into tb_user values(null, #{username},#{password})")
void add(User user);
}
编写获取Session的工具类MyBatisUtils
public class MyBatisUtils {
/**
* 会话工厂的创建类->会话工厂->会话
*/
private static SqlSessionFactory factory;
static {
//1.会话工厂的创建类
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//2.得到配置文件的输入流
try (InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml")) {
//3.创建会话工厂
factory = builder.build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 得到会话对象
* @return
*/
public static SqlSession getSession() {
return factory.openSession();
}
/**
* 得到会话对象
* @param openMode true表示自动提交事务,false表示手动提交事务
*/
public static SqlSession getSession(boolean openMode) {
return factory.openSession(openMode);
}
}
7.编写mybatis的配置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>
<settings>
<!--在控制台显示SQL语句-->
<setting name="logImpl" value="STDOUT_LOGGING" />
<!--映射下划线为驼峰命名法-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--起别名-->
<typeAliases>
<package name="com.itheima.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///request_test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--扫描mapper-->
<package name="com.mypack.mapper"/>
</mappers>
</configuration>
8.在servelt里调用mybatis
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//汉字乱码
request.setCharacterEncoding("utf-8");
//1.接收用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//2.调用Mapper查询,返回User对象
//2.1 调用工具类得到会话对象
SqlSession sqlSession = MyBatisUtils.getSession();
//2.2 由会话对象得到UserMapper的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//2.3 调用接口中方法查询
User user = userMapper.select(username, password);
//2.4 关闭会话
sqlSession.close();
//打印到浏览器上
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//3.判断User对象是否为null
if (user == null) {
//为null:登录失败
out.print("登录失败,<a href='login.html'>请重试</a>");
}
else {
//不为null:登录成功
out.print("欢迎您! " + username);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}