为了账号安全,请及时绑定邮箱和手机立即绑定

通过自动回复机器人学Mybatis---加强版

难度中级
时长 2小时43分
学习人数
综合评分9.77
214人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.7 逻辑清晰
  • @Message.xml部分代码 <!-- 计算消息列表条数 --> <select id="count" parameterType="com.imooc.bean.Message" resultType="int" > select count(*) from MESSAGE <where> <if test="command != null and !&quot;&quot;.equals(command.trim())"> and COMMAND=#{command}</if> <if test="description != null and !&quot;&quot;.equals(description.trim())"> and DESCRIPTION like '%' #{description} '%'</if> </where> </select> <!-- 分页查询 --> <select id="queryMessageListByPage" parameterType="java.util.Map" resultMap="MessageResult"> select <include refid="columns"/> from MESSAGE <where> <if test="message.command != null and !&quot;&quot;.equals(message.command.trim())"> and COMMAND=#{message.command} </if> <if test="message.description != null and !&quot;&quot;.equals(message.description.trim())"> and DESCRIPTION like '%' #{message.description} '%' </if> </where> order by ID limit #{page.dbIndex},#{page.dbNumber} </select>
    查看全部
  • @messageDao部分代码 /** * 根据查询条件查询消息列表条数 */ public int count(Message message){ DBAccess dbAccess=new DBAccess(); SqlSession sqlSession=null; int result=0; try { sqlSession=dbAccess.getSqlSession(); IMessage imessage=sqlSession.getMapper(IMessage.class); result=imessage.count(message); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } /** * 根据查询条件查询消息列表 */ public List<Message> queryMessageListByPage(Map<String, Object> parameter){ DBAccess dbAcess=new DBAccess(); List<Message> messageList =new ArrayList<Message>(); SqlSession sqlSession=null; try { sqlSession=dbAcess.getSqlSession(); //执行SQL语句 IMessage iMessage = sqlSession.getMapper(IMessage.class); messageList=iMessage.queryMessageListByPage(parameter); } catch (IOException e) { e.printStackTrace(); }finally{ if(sqlSession!=null){ sqlSession.close(); } } return messageList; }
    查看全部
  • @QueryService部分代码 /** * 根据查询条件查询消息列表(分页) */ public List<Message> queryMessageListByPage(String command,String description,Page page ){ //组织消息对象 Message message= new Message(); message.setCommand(command); message.setDescription(description); MessageDao messageDao=new MessageDao(); //根据条件查询条数 int totalNumber=messageDao.count(message); //组织分页参数 page.setTotalNumber(totalNumber); Map<String, Object> parameter=new HashMap<String, Object>(); parameter.put("message", message); parameter.put("page", page); //查询分页返回结果 return messageDao.queryMessageListByPage(parameter); }
    查看全部
  • @ListServlet部分代码 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置编码 req.setCharacterEncoding("utf-8"); //接受页面值 String command = req.getParameter("command"); String description = req.getParameter("description"); String currentPage = req.getParameter("currentPage");//获取当前页数 //创建分页对象 Page page=new Page(); Pattern pattern=Pattern.compile("[0-9]{1,9}"); if(currentPage==null || !pattern.matcher(currentPage).matches()){ page.setCurrentPage(1); }else { page.setCurrentPage(Integer.valueOf(currentPage)); } //查询消息列表并向页面传值 QueryService queryService=new QueryService(); req.setAttribute("messageList", queryService.queryMessageListByPage(command, description, page)); //向页面传值 req.setAttribute("command", command); req.setAttribute("description", description); req.setAttribute("page", page); //向页面跳转 req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req, resp); }
    查看全部
  • @Page部分源码 /** * 分页对应的实体类 * */ public class Page { private int totalNumber;//总条数 private int currentPage;//当前第几页 private int totalPage;//总页数 private int pageNumber=5;//每页显示条数 private int dbIndex;//数据库中Limit的参数,从第几条开始取 private int dbNumber;//数据库中Limit的参数,一共取多少条 /** * 根据当前对象中属性值计算并设置相关属性值 */ public void count(){ //计算总页数 int totalPageTemp=this.totalNumber / this.pageNumber; int plus=(this.totalNumber % this.pageNumber) == 0 ? 0 : 1; totalPageTemp=totalPageTemp+plus; if(totalPageTemp<=0){ totalPageTemp=1; } this.totalPage=totalPageTemp; //设置当前页数 //总页数小于当前页数,将当前页数设为总页数 if(this.totalPage<this.currentPage){ this.currentPage=this.totalPage; } //当前页数小于1时,设当前页数为1 if(this.currentPage<1){ this.currentPage=1; } //设置limit参数 this.dbIndex=(this.currentPage-1)*this.pageNumber; this.dbNumber=this.pageNumber; } //其他getter和setter方法,在此忽略 public void setTotalNumber(int totalNumber) { this.totalNumber = totalNumber; this.count(); } }
    查看全部
  • Mybatis特点: 1.SQL语句与代码分离 优点:便于管理和维护 缺点:不便于调试,需要借助日志工具获得信息 2.用标签控制动态SQL的拼接 优点:用标签代替编写逻辑代码 缺点:拼接复杂SQL语句时,没有代码灵活,比较复杂 3. 结果集与Java对象的自动映射 优点:保证名称相同即可自动映射 缺点:对开发人员所写的SQL依赖性很强 4. 编写原生SQL 优点:接近JDBC,很灵活 劣势:对SQL语句依赖程序很高;半自动;数据库移植不方便
    查看全部
  • 相关代码——(下): @CommandContentDao.java /** * 和command_content表相关的数据库操作 */ public class CommandContentDao { //使用mybatics批量新增 public void insertBatch(List<CommandContent> contentlList){ DBAccess dbAccess=new DBAccess(); try { SqlSession sqlSession=dbAccess.getSqlSession(); //通过sqlSession执行SQL语言 ICommandContent commandContent = sqlSession.getMapper(ICommandContent.class); commandContent.insertBatch(contentlList); sqlSession.commit(); } catch (IOException e) { e.printStackTrace(); } } }
    查看全部
    0 采集 收起 来源:实现批量新增

    2018-03-22

  • 相关代码——(中): @CommandContentDao.java /** * 和command_content表相关的数据库操作 */ public class CommandContentDao { //使用jdbc批量增加 public void insertBatchByJdbc(List<CommandContent> contetnList){ try { Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/micro_message?characterEncoding=utf-8", "root", "root"); String insertSql="insert into command_content(content,command_id) values(?,?)"; PreparedStatement ps = conn.prepareStatement(insertSql); for(CommandContent c:contetnList){ ps.setString(1,c.getContent()); ps.setInt(2, c.getCommandId()); // ps.executeUpdate();//方法一:不推荐 ps.addBatch();//方法二 } ps.executeBatch();//方法二 } catch (Exception e) { e.printStackTrace(); } } }
    查看全部
    0 采集 收起 来源:实现批量新增

    2018-03-22

  • 相关代码——(上): @CommandContent.xml <insert id="insertOne" parameterType="com.imooc.bean.CommandContent"> insert into COMMAND_CONTENT(CONTENT,COMMAND_ID) values(#{content},#{commandId}) </insert> <insert id="insertBatch" parameterType="java.util.List"> insert into commandcontent(content,commandId) values <foreach collection="list" item="item" separator=","> (#{item.content},#{item.commandId}) </foreach> </insert> @ICommandContent.java public interface ICommandContent { //单条新增 public void insertOne(CommandContent content); //批量新增 void insertBatch(List<CommandContent> contentList); }
    查看全部
    0 采集 收起 来源:实现批量新增

    2018-03-22

  • sqlSession.getMapper(IMessage.class); 完成调用接口及实例?
    查看全部
    0 采集 收起 来源:接口式编程

    2017-01-02

  • mybatis获取statement其实是在statementHandler中,这是一个处理接口,有个prepare方法,返回Statement,这个方法是在BaseStatementHandler中实现的,statement是在instantiateStatement这个方法中获取的,这个方法是一个抽象方法,看它的PrepareStatementHandler实现,在这里边看到了connection.prepareStatement(sql,PreparedStatement.),也就是和JDBC类似的代码了,这就是分页拦截器要拦截的位置了。如何实现拦截呢?mybatis提供了相应的注解:@Intercept({@Signnature(type=StatementHandler.class),method=“prepare”,args={Connection.class}}) 1.type指向要连接的接口class,这里指向StatementHandler.class 2.Method指向要拦截的方法,这里是prepare 3.args[]拦截的方法的参数类型,这里是Connection.class 这样就准确描述了要拦截StatementHandler接口下的prepare方法。目标确定,接下来就可以做手脚了,在PrepareStatementHandler拿到sql语句之前将这个sql语句改装成我们的分页sql,然后在塞回去,让程序继续执行,这样就成功了。 实现拦截器需要实现三个方法: 1.intercept(Invocation invacation) 2.plugin(Object target)方法参数就是被拦截的对象target,返回的就是满足条件的代理类,Plugin.wrap(target,this):this也就是自定义拦截器实例,通过获取注解得到要拦截的类型,比较target的类型与this获取的要拦截的类型是不是一致,如果满足条件就获取代理对象,并执行intercept方法,没有获取代理对象的将直接返回,不会经过intercept方法。 3.setProperties(Properties properties)
    查看全部
  • mybatis拦截器实现分页 1.要拦截住 2.拦截下来做什么事 3.事情做完后要交回主权
    查看全部
  • sqlSession可以通过接口和sPring代理
    查看全部
  • 接口代言配置文件里的SQL语句步骤: 0.创建一个接口 1.首先统一命名空间【这里的命名空间地址是接口所在的位置作为xml文件的namespace】 2.想要为哪条SQL语句代言,就在接口中定义和id相对应(同名)的方法 3.SQL语句的返回值类型就是接口的返回值类型 通过mybaits获取接口 同时接口不能实例化! 通过sqlSession获取接口 Message message = new Message(); IMessage imessage = sqlSession.getMapper(IMessage.class); List<message> messageList = imessage.queryMessageList(message);
    查看全部
    1 采集 收起 来源:接口式编程

    2018-03-22

  • jdbc批量新增
    查看全部
    0 采集 收起 来源:实现批量新增

    2016-12-21

举报

0/150
提交
取消
课程须知
本课程的前导课程为《通过自动回复机器人学 Mybatis ---基础版》, 课程中案例的关联性极强,所以学习本课程唯一的条件就是学习过《通过自动回复机器人学 Mybatis ---基础版》
老师告诉你能学到什么?
1、 Mybatis 的接口式编程 2、实现分页查询 3、通过拦截器实现分页共通来了解 Mybatis 的拦截器 4、通过如何用数组做参数来了解 Mybatis 对类型的处理 5、 Mybatis 如何实现 jdbc 的 addBatch ,即批量插入

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!