目录
8、导入mybatis核心配置文件mybatis-config.xml
个人博客欢迎访问 --- 猿客栈
案例说明
完成用户登录和用户注册逻辑,与后端数据库联系
一、创建MavenWeb项目
点击新建模块,勾选使用骨架快速搭建。
二、导入相关依赖
在pom.xml文件中删除无用的代码,导入项目需要的依赖。设置打包方式位war包
1、导入maven编译插件
声明编译的jdk版本,如果不导入插件,会报不支持发行版本5的错误
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2、导入tomacat插件
使maven可以直接编译tomcat的项目插件,选择性安装,只能支持到tomcat7
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
</configuration>
</plugin>
3、导入servlet依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
4、导入druid数据库连接池依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
5、导入mysql依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
6、导入mybatis依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
7、导入junit依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
8、导入mybatis核心配置文件mybatis-config.xml
放入resources资源文件夹下。
<?xml version="1.0" encoding="UTF-8" ?>
<!--Mybatis核心配置文件-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
使用typeAliases再进行包扫描,给该包下的所有实体类起别名,直接使用不区分大小写的类名
例如SQL映射文件下的返回值类型可以直接使用user,而不是com.itheima.pojo.user
-->
<typeAliases>
<package name="com.itheima.pojo"/>
</typeAliases>
<!--environments:配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment-->
<environments default="development">
<environment id="development">
<!--事物的管理方式-->
<transactionManager type="JDBC"/>
<!--数据库连接池,默认为POOLED-->
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/users?useSSL=false&userServerPrepStmts=true"/>
<property name="username" value="root"/>
<property name="password" value="12345"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载SQL映射文件,使用包扫描-->
<package name="com.itheima.mapper"/>
</mappers>
</configuration>
三、使用Mapper代理
导入MySql映射文件 XXXMapper.xml
文件名称为(操作的pojo实体类对象名称+Mapper).xml 放入resources资源文件夹下。
<?xml version="1.0" encoding="UTF-8" ?>
<!--SQL映射文件-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper根标签 namespace必须要指定名称-->
<mapper namespace="com.itheima.mapper.UserMapper">
</mapper>
创建mapper接口
在java文件夹下创建一个mapper包,包下创建与SQL映射文件同名的mapper接口,在接口中声明操作数据库的方法,可以安装MyBatisX插件,实现方法与映射文件间的快速跳转。
同时要在resource文件夹下创建一个与mapper接口包名 同名的文件夹,将SQL映射文件放入。
完成Mapper代理
四、IDEA配置tomcat
在 Web核心 中有明确说明,注意要配置Deployment,导入war包。
五、创建数据库
id user_name password tel
六、开始编码
1、创建实体类User
public class User {
private Integer id;
private String username;
private String password;
private String tel;
public User() {
}
public User(String username, String password,String tel) {
this.username = username;
this.password = password;
this.tel = tel;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = 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 getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
2、在mapper接口中定义用户操作
public interface UserMapper {
//根据用户名和密码查询用户对象
User select(@Param("username") String username, @Param("password") String password);
//注册用户
int add(User user);
//根据用户名查找是否存在
User selectByName(@Param("username") String username);
}
3、在mapper接口对应的SQL映射文件创建SQL语句
<?xml version="1.0" encoding="UTF-8" ?>
<!--SQL映射文件-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper根标签 namespace必须要指定名称-->
<mapper namespace="com.itheima.mapper.UserMapper">
<resultMap id="userResultMap" type="user">
<!--resultMap有两个常用属性 id:设置主键字段的映射 result:设置一般字段的映射-->
<!--column表的列名 property实体类的属性名-->
<result column="user_name" property="username"></result>
</resultMap>
<!--根据用户名和密码登录-->
<select id="select" resultMap="userResultMap">
select * from login where user_name=#{username} and password=#{password};
</select>
<!--用户注册-->
<insert id="add" >
insert into login(user_name,password,tel) values(#{username},#{password},#{tel});
</insert>
<!--根据用户名判断账户是否存在-->
<select id="selectByName" resultMap="userResultMap">
select * from login where user_name=#{username};
</select>
</mapper>
4、创建一个工具类
由于整个的会话工厂只需要一个,避免代码冗余,创建会话工厂工具类用来得到会话工厂。
public class SqlSessionFactoryUtils {
//静态代码块随着类的创建而创建,且只创建一次,由于会话工厂只需要一个,所以用静态代码块
//登录与注册的代码逻辑相同,采用工具类获取会话工厂,避免冗余
private static SqlSessionFactory sqlSessionFactory;
//静态代码块不能抛异常,使用异常捕获
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
5、创建servlet包,处理登陆注册的业务逻辑
登陆操作:
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、接收用户名和密码
String username = req.getParameter("username");
String password = req.getParameter("password");
//2、使用Mybatis操作数据库
//1、加载mybatis核心配置文件获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//2、开启SqlSession对象
//SqlSession不能写在工具类,因为SqlSession代表用户与数据库的连接,如果放在工具类,则所有用户共用同一个连接
//这样无法管理事务,使多个用户之间产生影响
SqlSession sqlSession = sqlSessionFactory.openSession();
//3、获取Mapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//4、执行接口方法(执行SQL语句)
User user = userMapper.select(username,password);
//5、释放资源
sqlSession.close();
//3、查看输出结果响应给用户
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
if (user != null){
writer.write("<h1>登陆成功</h1>");
}else {
writer.write("<h1>登录失败</h1>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
注册操作:
@WebServlet("/addServlet")
public class AddServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决post获取请求数据中文乱码问题
req.setCharacterEncoding("UTF-8");
//1、接收用户名、密码和手机号
String username = req.getParameter("username");
String password = req.getParameter("password");
String tel = req.getParameter("tel");
User user1 = new User(username,password,tel);
//2、使用Mybatis操作数据库
//1、加载mybatis核心配置文件获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//2、开启SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3、获取Mapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//4、执行接口方法(执行SQL语句)
//先检查账户是否被注册
int i = 0;
User user = userMapper.selectByName(username);
if (user == null){
i = userMapper.add(user1);
sqlSession.commit();
}
//5、释放资源
sqlSession.close();
//3、查看输出结果响应给用户
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
if (i > 0){
writer.write("<h1>注册成功</h1>");
}else {
writer.write("<h1>注册失败,账户已存在</h1>");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
七、项目展示
需要前端资源请私信