使用Mybatis框架创建简单登录页面

总体

在这里插入图片描述

  • .dao层,dao层里面有一个接口,这里需要注意的是dao层没有实现类,原因是因为我们使用了Mybatis框架。
    下面展示 IUsersDao代码片
public interface IUsersDao {
   /**
    * 登录判断
    * 判断账号密码是否正确
    * @param uname
    * @param upwd
    * @return
    */
   //注解
   @Select("select * from user_test where uname=#{uname} and upwd=#{upwd}")
   //结果集映射
   @Results(id = "usersMap",value = {
           @Result(id = true,column = "id",property = "id"),
           @Result(column = "uname",property = "uname"),
           @Result(column = "upwd",property = "upwd"),
           @Result(column = "uage",property = "uage"),
           @Result(column = "uzhuzhi",property = "uzhuzhi"),
           @Result(column = "uphone",property = "uphone"),
   })
   //@param 传递多个参数,解决可读性和直观性 单对象可以不用@param
   List<Users> loginUsers(@Param("uname") String uname, @Param("upwd") String upwd);

   /**
    * 多表查询 多对多
    */
   @Select("select t1.*,t2.* from student t1 left join subject t2 on t1.stu_id=t2.stu_id")
   List<Map<String,Object>> selctTwoAll();
}

上述使用的是注解方式,也可以使用xml文件来完成配置。 通用结果集映射是在实体类中属性名与数据库中字段名不相同时设置,如果属性名和字段名相同可以选择不配置结果集映射。
@Result(id = true,column = “id”,property = “id”)这里的id表示是设置数据库中的主键字段

  • entity类,实体类,私有属性(尽量与数据库中字段名相对应),里面有getter、setter方法,toString方法,无参构造方法和有参构造方法(用不到的方法可以省略)。
    下面展示 Users代码片
/**
 * Users实体类
 * Created by acer on 2021/4/3.
 */
public class Users {
    private int id;//id编号
    private String uname;//账号
    private String upwd;//密码
    private String uage;//年龄
    private String uzhuzhi;//住址
    private String uphone;//电话
   //生成getter、setter方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    public String getUage() {
        return uage;
    }

    public void setUage(String uage) {
        this.uage = uage;
    }

    public String getUzhuzhi() {
        return uzhuzhi;
    }

    public void setUzhuzhi(String uzhuzhi) {
        this.uzhuzhi = uzhuzhi;
    }

    public String getUphone() {
        return uphone;
    }

    public void setUphone(String uphone) {
        this.uphone = uphone;
    }
    //生成tostring方法
    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", uname='" + uname + '\'' +
                ", upwd='" + upwd + '\'' +
                ", uage='" + uage + '\'' +
                ", uzhuzhi='" + uzhuzhi + '\'' +
                ", uphone='" + uphone + '\'' +
                '}';
    }
    //生成无参构造方法
    public Users() {
        super();
    }
    //生成有参构造方法
    public Users(int id, String uname, String upwd, String uage, String uzhuzhi, String uphone) {
        this.id = id;
        this.uname = uname;
        this.upwd = upwd;
        this.uage = uage;
        this.uzhuzhi = uzhuzhi;
        this.uphone = uphone;
    }
}

上述中生成了有参构造,无参构造,toString方法,如不需要可将其删除。这里需要注意的是创建实体类时尽量要将实体类中的属性名与数据库中的字段名相对应。

  • service层
    1.IUsersService接口类
    下面展示 IUsersService代码片
/**
 * service层接口
 * Created by acer on 2021/4/3.
 */
public interface IUsersService {
    //判断该用户是否存在,登录判断
    List<Users> loginUsers(String uname, String upwd);
   
}

IUsersService中的方法和IUsersDao中的方法是相同的

  1. UsersServiceImpl实现类
    下面展示一些 UsersServiceImpl代码片
/**
 * service实现类
 * Created by acer on 2021/4/3.
 */
public class UsersServiceImpl implements IUsersService {
    /**
     * 登录判断
     * @return
     */
    @Override
    public List<Users> loginUsers(String uname, String upwd) {
        //加载连接
        SqlSession session = MyBatisUtil.getSqlSession();
        //创建dao层
        IUsersDao dao = session.getMapper(IUsersDao.class);
        List<Users> b = dao.loginUsers(uname,upwd);
        //关闭session连接
        MyBatisUtil.close();
        return b;
    }
}

细心的会发现我上面是有一个MyBatisUtil,这个是我建的一个工具类,后面会说到

  • servlet层,控制层
    下面展示servlet层代码片
/**
 * servlet
 * 登录
 * Created by acer on 2021/4/5.
 */
@WebServlet("/loginUsersServlet")
public class loginUsersServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置中文编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("utf-8");
       //service
        IUsersService service=new UsersServiceImpl();
        //指定账号密码
        String uname=req.getParameter("uname");
        String upwd=req.getParameter("upwd");
        //传参
        /*List<Users> b = service.loginUsers(uname, upwd);*/
        List<Users>  b = service.loginUsers(uname,upwd);
        System.out.println(b);
        //isEmpty()判断list集合有没有元素,如果有元素返回false,没有返回true,如果集合本身设置为null,则会报空指针异常
        if(b.isEmpty()==false){
            req.getRequestDispatcher("selectServlet").forward(req,resp);
        }else
            req.getRequestDispatcher("fail.jsp").forward(req,resp);
    }
}

设置中文编码可以最后放到一个过滤器filter中,当前文件中只有一个servlet所以我图一个省事,就直接在此处写。isEmpty()判断list集合有没有元素,如果有元素返回false,没有返回true,如果集合本身设置为null,则会报空指针异常。

  • util类,工具类
    下面展示util类代码片
/**工具类
 * 加载数据库连接
 * Created by mp on 2021-03-30.- 9:38
 */
public class MyBatisUtil {
    private static SqlSessionFactory factory;

    //保证service层 进行多次dao操作,公用一个SqlSession对象
    private static ThreadLocal<SqlSession>  tl = new ThreadLocal<SqlSession>();

    static{
        try {
            String resouce = "mybatis-config.xml";  //代表总配置文件的路径
            InputStream is = Resources.getResourceAsStream(resouce);//使用输入流读取配置文件
            factory = new SqlSessionFactoryBuilder().build(is);//facotry只需要创建一个
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        SqlSession session = tl.get();
        if(session == null) {
            session = factory.openSession();
            tl.set(session);
        }
        return session;
    }


    public static void close(){
        SqlSession session = tl.get();
        if(session != null){
            session.close();
            tl.set(null);
        }
    }
}

上述中都有注释,不理解的地方可以留言问

  • 主配置文件 mybatis-config.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="oracle.jdbc.driver.OracleDriver"/>
            <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
            <property name="username" value="scott"/>
            <property name="password" value="tiger"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置mapper文件的路径-->
    <mappers>
        <mapper class="com.test.dao.IUsersDao"/>
    </mappers>
</configuration>

注:这是xml文件。 name=“username” value=“scott” 用户名
name=“password” value=“tiger” 密码
使用注解的方式的话,mappers中应该写成 class=“全限定类名” 。如果使用xml配置的话应该写成 resource=“com/test/dao/StudentMapper.xml” 后面跟的是mapper.xml文件的全限定类名。

今天就先到这里,有问题的可以留言,也可以直接私信我,不喜勿喷,谢谢大家,再见!!!

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码农qwq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值