public interface MovieDao extends JpaRepository {
// 根据电影的id查询, findById -- 属性名为id
public Movie getById(Integer id);
// 根据电影名称和电影描述查询
public Movie getByNameAndYear(String name, String year);
// Or, 这可能查询出多个结果, 所以需要用集合保存结果
public List findByNameOrYear(String name, String year);
// Between, 从第一个参数到第二个参数之间
public List findByYearBetween(String start, String end);
// LessThan, 小于
public List findByYearLessThan(String data);
// GreaterThan, 大于
public List readByYearGreaterThan(String data);
// After, 字段中大于data的记录(测试时效果与GreaterThan相同, 不知道有什么区别)
public List readByYearAfter(String data);
// Before, 字段中小于data的记录(同上)
public List readByYearBefore(String data);
// IsNull, 说明null表示没有值, 它并不是空值, 空值是: "" (空字符串), 查询时需要注意它们的区别
public List getByYearIsNull();
// IsNotNull
public List getByYearIsNotNull();
// like(模糊查询 like为表达式, 具体由Cotroller中拼接)
public List findByDescLike(String like);
// In, in表示从列表中查询, 参数可以是数组和集合
public List findByYearIn(String[] s);
// 按Desc模糊查询再按Year降序排列 /*这个是比较综合的查询*/
public List findTop3ByDescLikeOrderByYearDesc(String like);
}
Controller中我对接口的测试 (只看方法名称就知道代表的意思)
@RestController
public class MovieController {
@Autowired
private MovieDao dao;
@RequestMapping("/getMovieById/{id}")
public void getMovieById(@PathVariable String id) {
int parseId = 0;
try {
parseId = Integer.parseInt(id);
} catch (NumberFormatException e) {
System.err.println("请输入非零正数");
return;
}
/*如果传入的参数正确才查询DB*/
if (parseId > 0) {
Movie movie = dao.getById(parseId);
if (movie != null) {
System.out.println(movie.getName());
} else {
System.out.println("您查询的内容不存在");
}
return;
}
System.out.println("请输入非零正数");
}
@RequestMapping("/findMovieByNameAndYear")
public String getByNameAndYear(String name, String year) {
if (year == null || name == null) {
System.out.println("请输入名称和年份");
return null;
}
Movie movie = dao.getByNameAndYear(name, year);
if (movie != null) {
System.out.println(movie.getDesc());
}
return null;
}
@RequestMapping("/findMovieOrNameAndYear")
public void getByNameOrYear(String name, String year) {
List movies = dao.findByNameOrYear(name, year);
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
@RequestMapping("/findByYearBetween")
// between
public void findByYearBetween(String start , String end) {
if (start == null || end == null) {
return;
}
List movies = dao.findByYearBetween(start, end);
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
@RequestMapping("/findByYearLessThan")
public void findByYearLessThan(String data) {
if (data == null) {
return;
}
List movies = dao.findByYearLessThan(data);
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
@RequestMapping("/readByYearGreaterThan")
public void readByYearGreaterThan(String data) {
if (data == null) {
return;
}
List movies = dao.readByYearGreaterThan(data);
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
@RequestMapping("/readByYearAfter")
// After
public void readByYearAfter(String data) {
if (data == null) {
return;
}
List movies = dao.readByYearAfter(data);
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
@RequestMapping("/getByYearIsNull")
public void getByYearIsNull() {
List movies = dao.getByYearIsNull();
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
@RequestMapping("/getByYearIsNotNull")
public void getByYearIsNotNull() {
List movies = dao.getByYearIsNotNull();
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
@RequestMapping("/findByDescLike")
public void findByDesc(String data) {
String like = "%" + data + "%";
List movies = dao.findByDescLike(like);
System.out.println(movies.size());
}
// 模糊查询排序(JPA规范看: 按Desc查询, 按Year排序)
@RequestMapping("/findTop3ByDescLikeOrderByYearDesc")
public void findTop3ByDescLikeOrderByYearDesc(String data) {
String like = "%" + data + "%";
List movies = dao.findTop3ByDescLikeOrderByYearDesc(like);
for (Movie movie : movies) {
System.out.println(movie.getYear() + ": " + movie.getName());
}
}
@RequestMapping("/findByYearIn")
public void findByYearIn(String a) {
String[] arr = null;
if(a != null) {
arr = a.split(",");
}
if(arr == null) return;
List movies = dao.findByYearIn(arr);
for (Movie movie : movies) {
System.out.println(movie.getName());
}
}
// 查询所有对象
@RequestMapping("/findAll")
public void findAll() {
List movies = dao.findAll();
for (Movie movie : movies) {
System.out.println(movie.getDesc());
}
}
// 查询某个对象
@RequestMapping("/findOne/{id}")
public void findOne(@PathVariable String id) {
int parseId = Integer.parseInt(id);
Movie movie = dao.findOne(parseId);
if (movie == null) {
return;
}
System.out.println(movie.getDesc());
}
// 删除对象
@RequestMapping("/delete/{id}")
public void delete(@PathVariable String id) {
int parseId = Integer.parseInt(id);
boolean flag = false;
try {
dao.delete(parseId);
flag = true;
} catch (Exception e) {}
if (flag == true) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
}
// count
@RequestMapping("/count")
public void count() {
System.out.println(dao.count());
}
// exists
@RequestMapping("/exists/{id}")
public void exists(@PathVariable String id) {
int parseId = Integer.parseInt(id);
System.out.println(dao.exists(parseId));
}
// save
@RequestMapping("/save")
public void save(String name, String img_url, String year, String artist, String desc) {
Movie entity = new Movie();
entity.setName(name);
entity.setImgUrl(img_url);
entity.setYear(year);
entity.setArtist(artist);
entity.setDesc(desc);
try {
dao.save(entity);
System.out.println("写入成功");
} catch (Exception e) {
System.out.println("写入失败");
e.printStackTrace();
}
}
}
@RequestMapping("/exampleSelect")
public void exampleCount(String name, String year) {
// 创建对象
Movie movie = new Movie();
movie.setName(name);
movie.setYear(year);
//创建匹配器
ExampleMatcher matcher = ExampleMatcher.matching()
// name, year代表数据表中的字段名(但以实体类中的字段名为准)
.withMatcher("name", GenericPropertyMatchers.contains()) // 包含
.withMatcher("year", GenericPropertyMatchers.endsWith()) // 以结尾
//.withMatcher("实体字段名", 匹配条件); // 还可以继续加匹配
// 要忽略id(不清楚原因)
.withIgnorePaths("id");
//创建实例, 用这个实例movie去匹配数据表中的每条记录 (这个实例对象就相当于一条数据表记录)
Example ex = Example.of(movie, matcher);
long mo = dao.count(ex);
System.out.println(mo);
}
JPQL查询
类似HQL语法在方法上使用@Query注解
@Query(value="select * from movie where id = ?1", nativeQuery = true)
public Movie findDefinedId(int id);
上面在Query注解中加上了nativeQuery = true, 则这就是原生sql查询
如下的字段名id, movie_name只能是原数据表中的字段名, 不能改为实体类中的属性名
查询单个字段, 返回简单类型
@Query(value="select id, movie_name from movie where id = ?1", nativeQuery = true)
public String findDefinedId(int id);
查询多个字段, 返回数组类型
//原生sql查询
@Query(value="select movie_name, id, artist from movie where id = ?1", nativeQuery = true)
public String[] findDefinedId(int id);
查询全部字段可以返回对象
HQL查询也是使用Query注解, 但是不加nativeQuery=true
// HQL查询, 如果查询的是单个字段, 就返回简单类型
// HQL查询, 如果查询的是多个字体, 则返回的是数组
@Query(value="select id, name from Movie where id = ?1")
public String[] findDefinedHqlId(Long id);
// HQL查询, 查询多个字段, 但是想要返回对象, 则应该这样写, 但是要保证实体中有引构造器
@Query(value="select new Movie(id, name) from Movie where id = ?1")
public List findDefinedHqlIdToObject(Long id);
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支 持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
实用命令实例
默认启动
tcpdump
普通情况下,直
MO= Mobile originate,上行,即用户上发给SP的信息。MT= Mobile Terminate,下行,即SP端下发给用户的信息;
上行:mo提交短信到短信中心下行:mt短信中心向特定的用户转发短信,你的短信是这样的,你所提交的短信,投递的地址是短信中心。短信中心收到你的短信后,存储转发,转发的时候就会根据你填写的接收方号码寻找路由,下发。在彩信领域是一样的道理。下行业务:由SP
import java.util.Arrays;
import java.util.Random;
public class MinKElement {
/**
* 5.最小的K个元素
* I would like to use MaxHeap.
* using QuickSort is also OK
*/
public static void
添加没有默认值:alter table Test add BazaarType char(1)
有默认值的添加列:alter table Test add BazaarType char(1) default(0)
删除没有默认值的列:alter table Test drop COLUMN BazaarType
删除有默认值的列:先删除约束(默认值)alter table Test DRO
Spring Boot 1.2.4已于6.4日发布,repo.spring.io and Maven Central可以下载(推荐使用maven或者gradle构建下载)。
这是一个维护版本,包含了一些修复small number of fixes,建议所有的用户升级。
Spring Boot 1.3的第一个里程碑版本将在几天后发布,包含许多