使用注解开发Myabatis
使用注解开发面向接口编程
在真正的开发中,很多时候我们会选择面向接口编程
根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;
而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。
关于接口的理解
接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:
第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。抽象体与抽象面是有区别的。
三个面向区别
面向对象是指,我们考虑 ...
ResultMap及分页
ResultMap查询为null问题要解决的问题:属性名和字段名不一致
查看之前的数据库的字段
java中的实体类设计
12345678910public class User { private int id; //id private String name; //姓名 private String password; //密码和数据库不一样! //构造 //set/get //toString()}
接口
12//根据id查询用户User selectUserById(int id);
mapper映射文件
123<select id="selectUserById" resultType="user"> select * from user where id = #{id}</select>
测试
12345678@Testpublic void testSelectUserById() { SqlSessi ...
CRUD操作及配置解析
CRUD(增删查改)操作select
select标签是mybatis中最常用的标签之一
select语句又很多属性可以详细配置每一条SQL语句
SQL语句返回值类型。【完整的类名或者别名】
传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】
命名空间中唯一的标识符
接口中的方法名与映射文件中的SQL语句ID 一一对应
id
parameterType
resultType例如:根据用户名查询用户
在UserMapper中添加对应方法123456public interface UserMapper { //查询全部用户 List<User> selectUser(); //根据id查询用户 User selectUserByName(String username);}
在UserMapper.xml中添加Select语句123<select id="selectUserByName" resultType="com.kuang.pojo.User">select * ...
MyBatis
MyBatis简介
环境说明:
jdk 8+
Mysql 8.0.19
maven-3.6.3
IDEA涉及:
JDBC
MYSQL
Java 基础
Maven
Junit什么是MyBatis?
MyBatis 是一款优秀的持久层框架
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。
2013年11月迁移到Github .
Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
GitHub : https://github.com/mybatis/mybatis-3持久化
持久化是将程序数据在持久状态和瞬时状态间转换的机制
即把数 ...
合并回文子串
题目
涉及的知识点区间dp: 在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的最优解从而得出整个大区间上最优解的dp算法。
解题思路第一步,数据不大,故建四维数组,设dp[l1][r1][l2][r2]表示a[l1…r1]和b[l2…r2]合并是否能组成回文串第二步,当(r1-l1)+(r2-l2)<=1,dp[l1][r1][l2][r2]=1(即true)第三步,转移方程:12345678//回文串最左边的字符a[l1]和最右边的字符a[r1]相等dp[l1][r1][l2][r2] |= dp[l1+1][r1-1][l2][r2];//回文串最左边的字符b[l2]和最右边的字符b[r2]相等dp[l1][r1][l2][r2] |= dp[l1][r1][l2+1][r2-1];//回文串最左边的字符a[l1]和最右边的字符b[r2]相等dp[l1][r1][l2][r2] |= dp[l1+1][r1][l2][r2-1];//回文串最左边的字符b[l2]和最右边的字符a[r1]相等dp[l1][r1][l2][r2] |= dp[l1+1][r1- ...
Bellman-Ford与SPFA
BFDijkstra算法可以很好的解决无负权图,但如果出现了负权边,便会失效。首先,图的任意一条最短路径既不能包含负权回路,也不会包含正权回路,因此它最多包含|v|-1条边。,如果把源点S作为一棵树的根结点,把其他结点按照最短路径的结点顺序连接,就会生成一棵最短路径树。主要思路如下(伪代码)复杂度为(V*E):
12345678910for(i=0;i<n-1;i++)//n为顶点数 { for(each edge u->v)//每轮操作遍历所有边 { if(d[u]+length[u->v]<d[v])//以u为中介点可以使的d[v]更小 { d[v]=d[u]+length[u->v];//松弛操作 } } }
邻接表的代码:
123456789101112131415161718192021222324252627282930313233343 ...
学生信息管理系统
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220 ...
平衡二叉树的基本操作
题目链接
基本概念平衡二叉树又称AVL树,它是一种具有平衡因子的特殊二叉排序树。平衡二叉树或者是一棵空树,或者是具有以下几条性质的二叉树:
若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值;
它的左右子树也分别为平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。
若将二叉树上结点的平衡因子定义为该结点的左子树深度减去它的右子树的深度,则平衡二叉树上的所有结点的平衡因子只可能为-1、0和1。只要二叉树上有一个结点的平衡因子的绝对值大于1,则这棵二叉树就是不平衡的。
通过平衡二叉树的性质不难得知,其插入、删除、查询都操作的时间复杂度均为O(log2n)。
解释一下右转代码如下:123456789void lg_R(lg** root){ lg *t=(*root)->left; (*root)->left=t->right; t->right=(*root); (*root)->h=lg_geth((*root)); t ...
目录树
题目描述Problem B: 目录树Time Limit: 1 Sec Memory Limit: 128 MBTotal Submissions: 276 Accepted: 198 Creator: admin
Problem Description
在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。
Input Description
输入首先给出正整数N(≤10^4),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符):•路径和名称中的字符仅包括英文字母(区分大小写);•符号“\”仅作为路径分隔符出现;•目录以符号“\”结束;•不存在重复的输入项目;•整个输入大小不超过2MB。
Output Description
假设所有的路径都相对于root目录。从root目录开始,在输出时每个目录首先输出自己的名字,然后以字典序输出所有子目录,然后以字典序输出 ...
算概率
题目
分析他要我们求的是在n道题目中,有0,1,2,3….n道题目做对的概率,然后分别按隔一个空格输出对1e9+7求模后的结果,首先,我来解释一下下面几个代码的含义:在代码中,我们先定义一个二维数组,f[2020][2020],对于f[i][j]的含义是在当前的i道题目中,恰好有j道题目做对的概率(以下所说的概率都是求模后的结果)。
12const int mod=1e9+7;(mod+1-p[i])%mod
该式的意义是第i题做错的概率。为了方便计算,我们都是假设分式a/b当中分母b的值为1,即b=1,(因为任何分式都可以化为分母为1的式子,当然,分子a可以为小数。所以由b*q%(1e9+7)=a;这里b=1,q就是我们输入的p[i],可得p[i]=kmod+a;即a=p[i]-kmod;那么求对应的错误的概率就是用1-a,即1-a=(kmod+1-p[i])%mod=(mod+1-p[i])%mod,因为分母b为1;
1f[i][0]=f[i-1][0]*(mod+1-p[i])%mod;
那么,该行代码的意思就是当前有i道题目,有0道做对的概率等于i-1道题目中有0道题目做对的概 ...





