## 属性名和字段名对不上解决的办法
1.就是在xml 的SQL语句中给查询的列起别名.
2.在mapper标签中进行配置.
~~~
<resultMap id="userMap" type="com.like.domain.User"> //所有查询的resultType指定为此id
<!--主键字段的对应-->
<id property="" column=""></id>
<!--属性和列名-->
<result property="" column=""></result>
<result property="" column=""></result>
<result property="" column=""></result>
</resultMap>
~~~
## 查询一个
~~~
User findById(Integer id);
~~~
~~~
<select id="findById" parameterType="java.lang.Integer" resultType="com.like.domain.User">
select * from user where id = #{id}
</select>
~~~
~~~
User user = mapper.findById(48);
System.out.println(user);
~~~
## 模糊查询
~~~
List<User> findByName(String username);
~~~
~~~
<select id="findByName" parameterType="java.lang.String" resultType="com.like.domain.User">
select * from user where username like #{username} //这种方式性能更好
select * from user where username like '%#{value}%' //这种写法也可以,但是必须写成value
</select>
~~~
~~~
//使用SqlSession创建Dao接口的代理对象
IUserDao mapper = session.getMapper(IUserDao.class);
//使用代理对象执行方法
List<User> users = mapper.findByName("%王%");
List<User> users = mapper.findByName("王"); //针对第二种写法
System.out.println(users);
~~~
## 查询返回一行一列
~~~
int findTotal();
~~~
~~~
<select id="findTotal" resultType="int">
select count(id) from user
</select>
~~~
~~~
//使用SqlSession创建Dao接口的代理对象
IUserDao mapper = session.getMapper(IUserDao.class);
//使用代理对象执行方法
int total = mapper.findTotal();
System.out.println(total);
~~~
## 插入
~~~
void saveUser(User user);
~~~
~~~
<insert id="saveUser" parameterType="com.like.domain.User">
insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})
</insert>
~~~
~~~
User user = new User();
user.setUsername("jack");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("江苏");
//使用SqlSession创建Dao接口的代理对象
IUserDao mapper = session.getMapper(IUserDao.class);
//使用代理对象执行方法
mapper.saveUser(user);
//手动提交事务
session.commit();
~~~
## 插入并获得id
可以写成这样
~~~
<insert id="saveUser" parameterType="com.like.domain.User">
-- 配置插入数据后获取插入数据的id.
-- 第一个id是属性id,第二个是数据库的主键,第三个是先于插入SQL还是后于,第四个是返回类型
<selectKey keyProperty="id" keyColumn="id" order="AFTER" resultType="int">
select last_insert_id()
</selectKey>
insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})
</insert>
~~~
~~~
//使用SqlSession创建Dao接口的代理对象
IUserDao mapper = session.getMapper(IUserDao.class);
System.out.println("保存前:" + user);
//使用代理对象执行方法
mapper.saveUser(user);
//手动提交事务
session.commit();
System.out.println("保存后:" + user); //这里的对象已经有了id属性了
~~~
## 使用实体类的包装对象作为查询条件
QueryVo类: vo表示数据对象(value object)
~~~
package com.like.domain;
public class QueryVo
{
private User user;
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
}
~~~
~~~
<select id="findUserByVo" parameterType="com.like.domain.QueryVo" resultType="com.like.domain.User">
select * from user where username like #{user.username}
</select>
~~~
~~~
QueryVo queryVo = new QueryVo();
User user = new User();
user.setUsername("%王%");
queryVo.setUser(user);
//使用SqlSession创建Dao接口的代理对象
IUserDao mapper = session.getMapper(IUserDao.class);
//使用代理对象执行方法
List<User> users = mapper.findUserByVo(queryVo);
System.out.println(users);
~~~
## 更新
~~~
void updateUser(User user);
~~~
~~~
<update id="updateUser" parameterType="com.like.domain.User">
update user set username = #{username},address = #{address},birthday = #{birthday},sex = #{sex} where id = #{id}
</update>
~~~
~~~
User user = new User();
user.setId(50);
user.setUsername("milan");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("江苏");
//使用SqlSession创建Dao接口的代理对象
IUserDao mapper = session.getMapper(IUserDao.class);
//使用代理对象执行方法
mapper.updateUser(user);
//手动提交事务
session.commit();
~~~
## 删除
~~~
void deletedUser(Integer id);
~~~
~~~
<delete id="deletedUser" parameterType="java.lang.Integer">
这里只是一个占位符,可以随便写
delete from user where id = #{id}
</delete>
~~~
~~~
//使用SqlSession创建Dao接口的代理对象
IUserDao mapper = session.getMapper(IUserDao.class);
//使用代理对象执行方法
mapper.deletedUser(50);
//手动提交事务
session.commit();
~~~
- Maven
- 概述
- 常用命令
- 生命周期
- scope详解
- maven概念模型图
- IDEA创建maven工程
- 创建maven web项目
- 冲突解决
- pom文件标签详解
- maven工程拆分与聚合的思想
- 父子工程的创建
- 工程和模块的关系以及集成和依赖的概念
- 父子工程添加依赖
- 父子工程的三种启动方式
- Struts2
- 执行流程
- 配置
- action的使用
- 获取Servlet的API
- result标签的视图配置
- struts2属性封装
- struts2模型封装
- OGNL
- 值栈(ValueStack)
- 值栈context区存数据
- 值栈root区
- struts2对el的增强
- #,%,$符号使用
- 值栈扩展
- 拦截器
- 自定义拦截器
- 方法拦截器
- 注解方式
- Hibernate
- 配置
- 简单crud
- 持久化类编写规范
- OID
- 持久化类三种状态
- 一级缓存
- 查询
- session与当前线程绑定
- hibernate一对多配置
- 冗余SQL语句的原因
- hibernate多对多配置
- 级联操作
- 对象导航查询
- JPA
- JPA单表CRUD
- JPA多种查询
- JPA一对多关系映射
- JPA一对多操作
- JPA多对多关系映射
- JPA多对多操作
- QBC查询
- 离线条件查询(DetachedCriteria)
- SpringMVC
- 环境搭建
- 常用注解
- 请求参数绑定
- 绑定基本类型和字符串
- 绑定实体类型
- 解决中文乱码
- 绑定集合类型
- 自定义类型转换器
- 获取Servlet的API
- 响应字符串
- 响应void
- 响应ModelAndView
- 响应forward和redirect
- 响应过滤静态资源
- 响应json
- 文件上传基础
- SpringMVC上传文件
- 跨服务器文件上传
- 拦截器
- SpringMVC异常
- ControllerAdvice
- SpringMVC默认处理方式
- 概述
- @ExceptionHandler
- 消息转换器
- SpringMVC跨域
- Spring
- 概述
- IoC快速入门
- ApplicationContext三个常用实现类
- beanFactory和ApplicationContext区别
- bean创建三种方式
- POJO和Javabean的区别
- bean作用范围
- bean对象生命周期
- spring的依赖注入
- DI的属性注入方式
- 常用注解
- Spring新注解
- Spring整合连接池
- Spring的IOC注解配置
- Spring完全使用注解
- Spring整合junit
- AOP
- AOP配置
- JDBCTemplate
- JDBCTemplate在IOC中使用
- JDBCTemplate的CRUD
- JDBCTemplate在dao中使用
- 声明式事务
- spring事务API
- 事务XML配置
- 事务注解配置
- 全注解事务
- Spring编程式事务
- 整合SSH(XML版本)
- 整合SSH(半XML半注解)
- Spring5新特性
- MyBatis
- 概述
- 用maven创建MyBatis
- 将数据库配置单独文件
- typeAliases标签
- MyBatis的CRUD
- MyBatis实现Dao层开发
- 使用dao和代理类的区别
- MyBatis连接池
- MyBatis事务
- MyBatis动态SQL
- 多表操作
- 多表一对一
- 多表一对多
- 多表多对多
- JNDI
- 延迟加载和立即加载
- 延迟加载
- 一级缓存
- 二级缓存
- MyBatis注解
- MyBatis注解CRUD
- 注解实体类属性和字段对应关系
- MyBatis注解一对一和一对多
- MyBatis注解二级缓存
- SSM整合
- 搭建环境
- SpringBoot
- SpringBoot核心功能
- 快速入门
- SpringBoot配置文件
- yml配置文件语法
- 配置文件与配置类的属性映射方式
- 端口和映射路径
- 日志级别
- 访问静态资源
- SpringBoot注入方式一
- SpringBoot注入方式二
- 拦截器
- HikariCP连接池
- SpringBoot集成MyBatis
- 通用mapper
- SpringBoot事务
- SpringBoot集成Junit
- SpringBoot集成DataJPA
- SpringBoot集成Redis
- 使用SpringBoot提供的测试启动类
- 使用MockMvc
- SpringCloud
- RestTemplate
- Eureka概述
- Eureka快速入门
- Eureka集群
- Eureka客户端
- Eureka失效剔除和自我保护
- 负载均衡Ribbon
- Hystrix
- Hystrix服务降级
- Hystrix服务熔断
- Feign
- Feign的熔断机制
- Feign的请求压缩和日志级别
- Zuul网关
- Zuul快速入门
- Zuul路由规则
- Zuul过滤器
- Zuul自定义过滤器
- Zuul负载均衡和熔断
- Zuul高可用
- Zuul网关缓存
- SpringSecurity
- 快速入门
- SpringSecurity使用数据库认证