## 屬性名和字段名對不上解決的辦法
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使用數據庫認證