Mybatis 练习项目

目的

刚学完Mybatis,用一些小项目来巩固练习。

练习1

题目描述

  做一个密码验证界面,只需要一点点html和Servlet知识,整个项目使用MVC设计模式,三个包,Entity,Service,Dao。数据库有一张名为user的表,有主键Id,用户名name,密码password。

步骤

准备

  1.建表

CREATE TABLE Users(
    `id` INT,
    `name` VARCHAR(24),
    `password` VARCHAR(24),
    PRIMARY KEY(`id`)

)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO  users (`id`,`name`,`password`) VALUES (1,'szw','whh');

 2.建立目录结构

建一个j2ee的Maven项目,并且建立如下图的目录结构。

 构建Mybatis框架

1.Maven导包

 https://mvnrepository.com/ 

 在maven库里搜索Mybatis,选择用的多的版本就好。导入后记得刷新,保证导入。

      <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

2.mybatis-config.xml 


MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

environments(环境配置),用于配置默认事务处理机制(默认是JDBC),数据库连接池(默认是POOLED),还有关于连接数据库的配置。可以使用properties文件的形式配置。environments可以配置多套,根据id选择一套。为了练习,配置混用propertis文件和直接配置。

    <environments default="user">
        <environment id="user">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name='username' value="${username}"/>
                <property name="password" value="${password}"/>
                <property name="url" value="jdbc:mysql://localhost:3306/share?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
            </dataSource>
        </environment>
    </environments>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/share?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=root

typeAliases(类型别名),在一些Mybatis配置文件中,有些需要写类的全限定名,但这太复杂,可以通过配置typeAliases来简化。

    
    <typeAliases>
        <!--alias的值不区分大小写,一般首字母小写-->
        <typeAlias type="com.Entity.User" alias="user"></typeAlias>
    </typeAliases>

mappers(映射器),用来绑定所有的Mapper.xml。我的理解,Mybatis-congfig.xml是派出所,而Mapper.xml是个人,每个人的出生都需要报备,这样才能给身份证明。重点注意resource值的书写。

   <mappers>
        <!--每一个userMapper.xml都需要注册-->
        <!--有很多种形式-->
        <mapper resource="com/DAO/UserMapper.xml"/>
    </mappers>

3.userMapper.xml

配置mapper,配置nameplace来绑定Dao接口。

写Sql语句,为了练习,我们将实体类的变量名与数据库的设置的不同,使用结果集的映射来实现目的。问题:写一个方法,参数是map类型,map里有name和password,返回值为name和password为给定值的User对象。

<?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">
<!--命名空间是为了定位,对应一个Dao接口-->
<mapper namespace="com.DAO.Dao">
    <resultMap id="res" type="User">
        <result property="pwd" column="password"></result>
    </resultMap>
    <select id="selecteUser" parameterType="map" resultMap="res">
        select * from users where name = #{name} AND password = #{password};
    </select>
</mapper>

4.MybatisUtil

 SqlSessionFactoryBuilder

 这个类是用来生成SqlSessionFactory的,这就是个纯纯的工具人,他会根据Mybatis-config.xml

文件来配置相关参数,然后生成SqlSessionFactory。

SqlSessionFactory

 这个比较重要,可以生产SqlSession,我是这样理解的SqlSessionFactory相当于蚂蚁里的蚁后,只有一只,负责生产工兵蚁为她干活,SqlSession就相当于工兵蚁。

SqlSession

  出生就是为了完成任务的,可以有好多只,完成就死掉。根据以上模型,就知道这三个对象怎么处理,SqlSessionFactoryBuilder在工具类里被创建,生成SqlSessionFactory,而SqlSession在调用方法时被创建(Service层),用完及时close。

package com.Util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;
    static {
        InputStream inputStream = null;
        try {
            String resource = "mybatis-config.xml";
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

页面与Servlet

1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<div class="center">
    <form action="/DomSharing_war/Login" method="post">
        <input type="text" placeholder="请输入用户名" name="username"><br>
        <input type="password" placeholder="请输入密码" name="password"><br>
        <input type="submit" value="登录">
    </form>
    <form action="/DomSharing_war/register.html" method="post">
        <input type="submit" value="注册">
    </form>
</div>
<body>
</body>
</html>

2.servlet

package com.Web;
import com.Service.ServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/Login")
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServiceImpl sImpl = new ServiceImpl();
        String name = req.getParameter("username");
        String password = req.getParameter("password");
        Map<String,String> map = new HashMap<String,String>();
        map.put("name","szw");
        map.put("password","whh");
        int result = sImpl.chackPassword(map);

        switch (result){
            case 1:System.out.println("密码正确"); resp.sendRedirect("success.html"); break;
            case 2:System.out.println("用户名不存在");resp.sendRedirect("notFind.html"); break;
            case 3:System.out.println("密码错误"); resp.sendRedirect("wrongPassword.html"); break;
        }
    }
}

练习二在更。。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MyBatis是一种使用简便的Java持久化框架,可以很好地实现数据库访问和管理。为了更好地掌握MyBatis,狂神老师为我们准备了29道MyBatis练习题。这些题目分为基础篇和进阶篇两部分,主要内容包括MyBatis基础操作、插件、缓存、多表查询、动态SQL等内容。 这些习题不仅覆盖了MyBatis的各个方面,而且具有很高的实用性。通过做这些题目,可以对MyBatis的原理和应用有更清晰的认识,也可以发现和解决实际开发中遇到的问题。 狂神老师精心设计的这些练习题,难易程度逐步递增,让我们在掌握MyBatis的同时,也可以提高自己的编程能力。尤其对初学者来说,这些题目可以帮助加深对Java和MyBatis的理解,提高自己的编码能力和代码水平。 总之,狂神老师设计的MyBatis练习题深入浅出,能够帮助我们更好地掌握MyBatis,提高自己的编程能力。值得推荐给所有对MyBatis感兴趣的同学和开发者。 ### 回答2: Mybatis是一款轻量级的持久层框架,可以用于将Java对象映射到关系型数据库上。狂神老师在他的课程中发布了29道Mybatis练习题,让学习者可以通过练习深入掌握Mybatis的用法。 这29道练习题涵盖了Mybatis的最基本用法和高级应用,从最简单的CRUD到缓存、分页、一对多、多对多等高级查询,覆盖Mybatis的完整功能。通过练习这些题目,学习者可以深入理解Mybatis的核心机制和使用技巧,从而更好地应用Mybatis进行项目开发。 此外,狂神老师还为每个练习题提供了详细的讲解和示例代码,让学习者可以通过对比自己的答案,更好地理解Mybatis的实现原理,并通过实战方式学习。 总之,狂神老师发布的Mybatis练习题是一种非常优秀的学习资源,可以帮助学习者深入掌握Mybatis的用法,提升自己的技能水平。学习者可以通过反复练习,掌握Mybatis的精髓,更好地应用于实际项目中,实现高效的数据访问和管理。 ### 回答3: Mybatis是一款非常流行的Java持久化框架,它可以帮助我们更加便捷地实现对象关系映射。狂神在他的视频教程中,提供了29道Mybatis练习题,让我们能够更加深刻地理解Mybatis框架的使用方法和技巧。 这些练习题涵盖了Mybatis框架的各个方面,包括基本CRUD操作、高级查询、动态SQL、缓存机制等等。通过这29道练习题,我们可以逐步提高自己的Mybatis开发水平,掌握更多的技能和经验。 不仅如此, 狂神在这些练习题中还提供了详细的答案和解析,让我们可以更加深入地了解题目涉及到的知识点和细节。这不仅可以加深我们对Mybatis框架的理解,更可以帮助我们在实际项目中更加熟练高效地使用Mybatis。 总之,这29道Mybatis练习题是狂神教学的一个重要组成部分,对于想要提高自己的Mybatis开发技能的开发人员来说,非常有参考价值。我们可以通过认真练习和思考,不断掌握Mybatis框架的精髓,让自己的技能得到更大的提升。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值