我在这先说出我的例子
逻辑的开始是一个简单的jsp文件
一个from标签链接的是search文件,method属性是post代码如下
之后根据网页的配置文件web.xml中查询search文件并点击搜索按钮的时候将数据传给该文件,并调用该servlet的post方法;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | jee.pk3.AppListener SearchServlet SearchServlet jee.pk3.SearchServlet SearchServlet /SearchServlet |
上面代码中有一个servleContextLIstener监听器,该监听器的主要功能是当servletcontext容器调用时调用SqlSessionFactoryUtil.init();也就是当search文件的servletcontext容器调用的时候监听器就会调用SqlSessionFactoryUtil.init();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class AppListener implements ServletContextListener {
@Override public void contextInitialized(ServletContextEvent arg0) { try { SqlSessionFactoryUtil.init(); } catch (IOException e) { e.printStackTrace(); } }
} |
下面我们看看servlet文件中的代码。联系上面jsp文件中的代码以及web.xml代码可以看出search指的就是searchServlet文件,jsp文件传值也会传到该servlet文件的dopost方法的req参数中。然后借用req就可以调用jsp文件中的值了。
在下面就是mybatis的代码了,首先是实例化SqlSessionFactory ,该实例化涉及到刚才的配监听器,在调用servlet文件的时候servletcontext容器就会被调用,监听器的contextInitialized方法就会被调用,从而调用SqlSessionFactoryUtil.init();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class SearchServlet extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); String name=req.getParameter("name"); String sno=req.getParameter("sno"); String gender=req.getParameter("gender"); Student stu=new Student(); stu.setName(name); stu.setSno(sno); stu.setGender(gender);
SqlSessionFactory sqlSessionFactory=SqlSessionFactoryUtil.getInsertance(); try (SqlSession sqlSession=sqlSessionFactory.openSession(true)){ StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class); List list=studentMapper.search(stu); System.out.println(list); } }
} |
下面是mybatis查询数据库的sqlSessionFactory 的实例化,也就是在servlet文件被调用的时候,该实例化就已经完成。这样书写的目的是保证sqlSessionFactory的单例,避免多次实例化sqlSessionFactory造成资源的浪费。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class SqlSessionFactoryUtil {
public static SqlSessionFactory sqlSessionFactory; public static void init() throws IOException { String config="mybatis_config.xml"; InputStream is=Resources.getResourceAsStream(config); sqlSessionFactory =new SqlSessionFactoryBuilder().build(is); } public static SqlSessionFactory getInsertance() { return sqlSessionFactory; } } |
数据库的链接说完了,接下来我们说一说搜索语句的配置。首先我们要一个搜索方法的接口。接口代码如下:
1 2 3 | public interface StudentMapper { public List search(Student stu); } |
下面是sql搜索的配置文件,首先使用mapper标签确定映射的接口;然后使用resultMap标签根据实体类将数据库中的字段映射到实体对应的属性上。最后调用select标签将接口中的方法设为id,parameterType属性设置参数方法的参数,resultMap属性设置的是映射关系。select内部是sql语句。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
好了我的分享到此结束,如果你的所有逻辑都能通顺该错误就不会出现,所以请你仔细检查自己的代码是否出现各个传递层次的断层。
来源地址:https://blog.csdn.net/weixin_53867380/article/details/127498606
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341