Mybatis原始Dao开发方式

原始Dao开发方法需要程序员编写Dao接口和Dao实现类

数据库数据

在这里插入图片描述
待会儿后台需要执行的sql语句
在这里插入图片描述

JSP页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<a href="UserServlet?name=老">点击这里一下下</a>
	<C:forEach items="${list }" var="x">
	                </p>${x.name }
	</C:forEach>
</body>
</html>

后台代码

1、servlet

package com.xh.Servlet;
import java.io.IOException;
import java.util.List;
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 com.xh.Service.UserService;
import com.xh.ServiceImpl.UserServiceImpl;
import com.xh.user.User;

/**
 * Servlet implementation class UserServlet
 */
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		System.out.println("前台传过来的"+name);
		User user = new User();
		user.setName(name);
		UserService us = new UserServiceImpl();
		try {
			List<User> list = us.showUser(user);
			System.out.println("集合"+list);
			request.setAttribute("list", list);
			request.getRequestDispatcher("/show.jsp").forward(request, response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2、service

package com.xh.Service;
import java.util.List;
import com.xh.user.User;

public interface UserService {
	List<User> showUser(User user) throws Exception;
}

3、serviceImpl

package com.xh.ServiceImpl;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.xh.Dao.UserDao;
import com.xh.DaoImpl.UserDaoImpl;
import com.xh.Service.UserService;
import com.xh.user.User;

public class UserServiceImpl implements UserService {
	@Override
	public List<User> showUser(User user) throws Exception {
		InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
		SqlSessionFactory ss = new SqlSessionFactoryBuilder().build(in);
		UserDao ud = new UserDaoImpl(ss);
		return ud.findUserByName(user.getName());
	}
}

4、Dao

package com.xh.Dao;
import java.util.List;
import com.xh.user.User;

public interface UserDao {
	List<User> findUserByName(String name);
}

5、DaoImpl

package com.xh.DaoImpl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.xh.Dao.UserDao;
import com.xh.user.User;

public class UserDaoImpl implements UserDao {
	private SqlSessionFactory ss;
	
	//无参构造函数
	public UserDaoImpl() {
	}

	//通过有参数的构造函数传入会话工厂
	public UserDaoImpl(SqlSessionFactory ss) {
		this.ss = ss;
	}

	@Override
	public List<User> findUserByName(String name) {
		System.out.println("查看"+name);
		//创建数据库会话实列
		SqlSession s = ss.openSession();
		List<User> list = s.selectList("test.findUserByName", name);
		s.close();
		return list;
	}
}

6、演示结果
在这里插入图片描述
8、也可以直接用测试直接调Dao

package com.xh.test;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.xh.DaoImpl.UserDaoImpl;
import com.xh.user.User;

public class UserDaoImplTest {
	/* 直接测试UserDaoImpl  创建测试方法:在Other里面找到JUnit Test Case即可*/
	@Test
	public void test() {
		InputStream in = null;
		try {
			in = Resources.getResourceAsStream("SqlMapConfig.xml");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		SqlSessionFactory ss = new SqlSessionFactoryBuilder().build(in);
		List<User> list = new UserDaoImpl(ss).findUserByName("老");
		for (User x : list) {
			System.out.println(x.getName()+","+x.getSex());			
		}
	}
}

在这里插入图片描述

总结

原始Dao开发中存在以下问题:

  • Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法
  • 调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不利于开发维护。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值