JavaWeb——Servlet案例用户登录和用户注册和sqllsessionfactory工具类

用户登录

流程步骤

项目文件结构 

环境准备 

数据库建表语句如下 

-- 创建用户表
CREATE TABLE tb_user(
	id int primary key auto_increment,
	username varchar(20) unique,
	password varchar(32)
);

-- 添加数据
INSERT INTO tb_user(username,password) values('zhangsan','123'),('lisi','234');

SELECT * FROM tb_user;


 在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 + '\'' +
                '}';
    }
}

坐标导入

这里有mybatis驱动和mysql驱动程序的依赖,mysql驱动的版本根据自己电脑上mysql版本决定

 <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>

 创建mybatis核心配置文件

mysql8.0以上版本要加cj

xml里面&是特殊字符要转义使用&amp;

<?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>
    <!--起别名-->
    <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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///test1?useSSL=false&amp;useServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--扫描mapper-->
        <package name="com.itheima.mapper"/>
    </mappers>
</configuration>

创建mapper包下的接口映射以及resources文件下的对应目录XML文件

<?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="com.itheima.mapper.UserMapper">

</mapper>

mapper映射接口实现

在mybatis接口方法里面有多个参数的话要加上@Param注解做映射将sql语句里面的#{}参数占位符内的名称和@Param()内的参数相对应


public interface UserMapper {

    /**
     * 根据用户名和密码查询用户对象
     * @param username
     * @param password
     * @return
     */
    @Select("select * from tb_user where username = #{username} and password = #{password}")
    User select(@Param("username") String username,@Param("password")  String password);
    /**
     * 根据用户名查询用户对象
     * @param username
     * @return
     */
    @Select("select * from tb_user where username = #{username}")
    User selectByUsername(String username);
    /**
     * 添加用户
     * @param user
     */
    @Insert("insert into tb_user values(null,#{username},#{password})")
    void add(User user);
}

html页面设置

定义如下的表单,action里面的路径要加上虚拟目录

    <form action="/request-demo/loginServlet" method="post" id="form">
        <h1 id="loginMsg">LOGIN IN</h1>
        <p>Username:<input id="username" name="username" type="text"></p>

        <p>Password:<input id="password" name="password" type="password"></p>

        <div id="subDiv">
            <input type="submit" class="button" value="login up">
            <input type="reset" class="button" value="reset">&nbsp;&nbsp;&nbsp;
            <a href="register.html">没有账号?点击注册</a>
        </div>
    </form>

LoginServlet配置

第一步

接收登录界面传来的数据,这里使用Parameter通过键来获取值

String username = request.getParameter("username");
        String password = request.getParameter("password");

第二步

调用mybatis

获取sqlsessionFactory对象

(通过mybatis配置文件的输入流构建一个sqlsessionFactory对象)

有点像对着施工图纸完成一座工厂,一座专门用于产出sqlsession的工厂

String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

获取sqlsession对象

像是从工厂里面获取一个产品

SqlSession sqlSession = sqlSessionFactory.openSession();

获取Mapper对象

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

调用方法

User user = userMapper.select(username, password);

释放资源

sqlSession.close();

汇总代码: 

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 接收用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //2. 调用MyBatis完成查询
        //2.1 获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2.2 获取SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //2.3 获取Mapper
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //2.4 调用方法
        User user = userMapper.select(username, password);
        //2.5 释放资源
        sqlSession.close();

        //获取字符输出流,并设置content type
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        //3. 判断user释放为null
        if(user != null){
            // 登陆成功
            writer.write("登陆成功");
        }else {
            // 登陆失败
            writer.write("登陆失败");
        }
    }

第三步

判断user是否为null

根据查询的不同结果使用response返回不同的响应数据,这里返回的始终所以需要设置字符集为utf-8

 //获取字符输出流,并设置content type
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        //3. 判断user释放为null
        if(user != null){
            // 登陆成功
            writer.write("登陆成功");
        }else {
            // 登陆失败
            writer.write("登陆失败");
        }

这里成功使用数据库里面的账号登陆成功输出如下

失败登陆也有如下

以上就是用户登录的实现 

用户注册

注册流程

 定义mapper映射sql语句

在上面mapper接口实现类里面有了

创建一个新的RegisterServlet

和上面的流程机器相似,这里放全代码,以后有机会在来看两眼

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 接收用户数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //封装用户对象
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        
        //2. 调用mapper 根据用户名查询用户对象
        //2.1 获取SqlSessionFactory对象
       /* String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);*/
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();

        //2.2 获取SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //2.3 获取Mapper
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //2.4 调用方法
        User u = userMapper.selectByUsername(username);

        //3. 判断用户对象释放为null
        if( u == null){
            // 用户名不存在,添加用户
            userMapper.add(user);

            // 提交事务
            sqlSession.commit();
            // 释放资源
            sqlSession.close();
        }else {
            // 用户名存在,给出提示信息
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write("用户名已存在");
        }
    }

 成功输出如下 

 sqlsessionfactory工具类使用

在LoginServlet和RegisterServlet创建了两次sqlsessionfactory对象,代码重复量极大。

sqlsessionfactory对象都绑定了一个连接池,多个工厂有多个连接池,资源消耗极大。

所以要优化sqlsessionfactory的创建代码

 

创建工具类

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 (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

这里不把sqlsession对象的创建也放进去是因为

 最后Servlet里面创建工厂时直接调用方法返回值就可以了

 //2.1 获取SqlSessionFactory对象
       /* String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);*/

        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在一个 IDEA Web 项目中配置 MyBatis,您可以按照以下步骤进行操作: 1. 首先,确保您的项目已经添加了 MyBatis 和 JDBC 相关的依赖。您可以在项目的 `pom.xml`(如果使用 Maven)或者 `build.gradle`(如果使用 Gradle)文件中添加相关的依赖。 2. 在项目的 `src/main/resources` 目录下创建一个名为 `mybatis-config.xml` 的配置文件。在这个配置文件中,您可以定义 MyBatis 的全局配置信息,例如数据库连接信息、映射器和类型处理器等。 以下是一个示例的 `mybatis-config.xml` 配置文件: ```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> <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://localhost:3306/mydatabase"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <mappers> <!-- 这里可以配置映射器 --> </mappers> </configuration> ``` 您需要根据您自己的数据库配置来修改 `<dataSource>` 标签下的属性值。 3. 在您的代码中,创建一个 `SqlSessionFactory` 实例来加载 MyBatis 的配置信息。您可以利用 MyBatis 提供的 `XMLConfigBuilder` 类来实现这一点。 以下是一个示例的代码片段: ```java String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); ``` 4. 创建一个数据访问对象(DAO)的接口,并编写对应的 SQL 映射文件。 例如,创建一个名为 `UserMapper` 的接口,并在 `src/main/resources` 目录下创建一个名为 `UserMapper.xml` 的 SQL 映射文件。 在 `UserMapper` 接口中定义需要执行的 SQL 方法,例如: ```java public interface UserMapper { User getUserById(int id); void insertUser(User user); // ... } ``` 在 `UserMapper.xml` 文件中编写对应的 SQL 语句,例如: ```xml <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id} </select> <insert id="insertUser" parameterType="com.example.model.User"> INSERT INTO users (name, age) VALUES (#{name}, #{age}) </insert> <!-- ... --> </mapper> ``` 5. 使用 MyBatis 的 `SqlSession` 接口来执行数据库操作。 以下是一个示例的代码片段: ```java try (SqlSession session = sqlSessionFactory.openSession()) { UserMapper userMapper = session.getMapper(UserMapper.class); User user = userMapper.getUserById(1); // ... } ``` 您可以通过 `session.getMapper(UserMapper.class)` 的方式获取 `UserMapper` 的实例,然后调用其中定义的方法执行相应的 SQL 语句。 这样,您就完成了在 IDEA Web 项目中配置 MyBatis 的过程。当然,这只是一个简单的示例,您可以根据具体的需求进行适当的调整和扩展。希望对您有所帮助!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值