1.CRUD的含义

CRUD是指在做计算处理时的增加(Create)、读取(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。

2.URL的概念及含义

URL:Uniform Resource Locator 统一资源定位符。它是可以唯一标识一个资源的位置。
它的写法:
http://localhost:8080/mybatisserver/demo1Servlet
协议 主机    端口    URI

URI:Uniform Resource Identifier 统一资源标识符。它是在应用中可以唯一定位一个资源的。

3.Mybatis的CRUD操作

数据库表结构图:

数据库对应的实体类User.java

package domain;

import java.io.Serializable;
import java.util.Date; /**
* 数据库表对应的实体类
*/
public class User implements Serializable {
//实体类的成员变量名称应该与数据库中的列名一致
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}

IUserDao.java数据库表操作实现接口

package dao;

import domain.QueryConditon;
import domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.junit.Test; import java.util.List; /**
*
*/
public interface IUserDao {
/**
* 查询所有
* @return
*/
//注解模式
@Select("select *from user")
List<User> findAll(); /**
* 保存用户
* @param user
*/
@Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")
void saveUser(User user); /**
* 更新操作
* @param user
*/
@Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}")
void updateUser(User user); /**
* 删除操作
* @param userId 用户id
*/
@Delete("delete from user where id=#{userId}")
void deleteUser(Integer userId); /**
* 根据用户id查询
* @param userId 用户id
*/
@Select("select * from user where id=#{userId}")
User queryById(Integer userId); /**
* 根据用户名进行模糊查询
* @param username 用户名
* @return 查询结果
*/
@Select("select *from user where username like #{username} ")
List<User> queryByName(String username); /**
* 获取用户的总记录数
* @return
*/
@Select("select count(id) from user")
int queryTotalCount(); /**
* 根据查询条件对象(由实体类生成)进行查询
* @param queryConditon 查询条件
* @return
*/
@Select("select *from user where username like #{user.username} and sex like #{user.sex}")
List<User> queryByQueryConditionObject(QueryConditon queryConditon);
}

测试类

package test;

import dao.IUserDao;
import domain.QueryConditon;
import domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import java.io.InputStream;
import java.util.Date;
import java.util.List; public class MybatisTest01 { private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao; /**
* 初始化MyBatis
* @throws Exception
*/
public void initMyBatis() throws Exception{
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); //创建SqlSessionFactory的构建者builder
SqlSessionFactory factory=builder.build(in); //利用构建者builder创建SqlSessionFactory
//3.使用工厂生产SqlSession对象
sqlSession = factory.openSession();
//4.使用SqlSessions对象创建Dao接口的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
} /**
* 释放资源
* @throws Exception
*/
public void destroy() throws Exception{
sqlSession.commit();//提交事务
sqlSession.close();
in.close();
} /**
* 查询所有
*/
@Test
public void testQueryAll() throws Exception{ initMyBatis();
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
destroy();
} /**
* 测试保存操作
* @throws Exception
*/
@Test
public void testSave() throws Exception{
User user=new User();
user.setUsername("lucky");
user.setAddress("天台");
user.setBirthday(new Date());
user.setSex("男"); initMyBatis();
//5.使用代理对象执行方法
userDao.saveUser(user); destroy();
} /**
* 测试更新操作
* @throws Exception
*/
@Test
public void testUpdate() throws Exception{
User user=new User();
user.setId(49);
user.setUsername("lucky");
user.setAddress("浙江天台");
user.setBirthday(new Date());
user.setSex("男"); initMyBatis();
//5.使用代理对象执行方法
userDao.updateUser(user); destroy();
} /**
* 测试更新操作
* @throws Exception
*/
@Test
public void testDelete() throws Exception{ initMyBatis();
//5.使用代理对象执行方法
userDao.deleteUser(48);
destroy();
} /**
* 测试查询一个的方法
* @throws Exception
*/
@Test
public void testQueryOne()throws Exception{
initMyBatis();
//5.使用代理对象执行方法
User user=userDao.queryById(49);
System.out.println(user);
destroy();
} /**
* 模糊查询
* @throws Exception
*/
@Test
public void testQueryByName()throws Exception{
initMyBatis();
//5.使用代理对象执行方法
List<User> users = userDao.queryByName("%ck%");
for (User user : users) {
System.out.println(user);
}
destroy();
} /**
* 查询总记录数
* @throws Exception
*/
@Test
public void testQueryTotalCount()throws Exception{
initMyBatis();
//5.使用代理对象执行方法
int totalCount = userDao.queryTotalCount();
System.out.println(totalCount);
destroy();
} /**
* 根据查询条件实体类对象进行查询
* @throws Exception
*/
@Test
public void testQueryConditionObject()throws Exception{
initMyBatis();
QueryConditon queryConditon=new QueryConditon(); //创建查询条件实体类
User user=new User();
user.setUsername("%王%"); //查询条件1:名字包含王
user.setSex("女"); //性别为女
queryConditon.setUser(user); //将查询条件封装到查询条件实体类QueryConditon中
//5.使用代理对象执行方法
List<User> users = userDao.queryByQueryConditionObject(queryConditon);
for (User user1 : users) {
System.out.println(user1);
}
destroy();
} }

4.Mybatis连接池

(1)连接池综述:
  我们在实际开发中都会使用连接池。
  因为它可以减少我们获取连接所消耗的时间。


(2)mybatis中的连接池
mybatis连接池提供了3种方式的配置:
配置的位置:
  主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。
  type属性的取值:
    POOLED    采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
    UNPOOLED    采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
    JNDI                采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
                 注意:如果不是web或者maven的war工程,是不能使用的。
            我们课程中使用的是tomcat服务器,采用连接池就是dbcp连接池。

最新文章

  1. TinyFox/Jexus如何正确使用配置文件
  2. 理解 Node.js 里的 process.nextTick()
  3. 对Linux(Unix)的基础知识归纳
  4. Guava - 并行编程Futures
  5. CodeForces 710CMagic Odd Square(经典-奇数个奇数&amp;偶数个偶数)
  6. 怎样用ZBrush快速雕刻皮肤纹理
  7. [HDOJ5584]LCM Walk(数论,规律)
  8. Android Handler传递参数动态更新UI界面demo
  9. centos7安装chrome及加载poatman开发插件
  10. wamp5.2 升级到wamp5.3 (转载)
  11. CodeFirst EF中导航属性的个人理解
  12. 一个i++和++i导致的严重的错误
  13. hdu1853解题报告
  14. js判断MAC地址
  15. 长话短说 之 js的原型和闭包
  16. CentOS设置系统时间、硬件时间、以及定时校对时间
  17. 编译树莓派2代B型OpenWrt固件实现无线路由器及nodogsplash认证功能
  18. [python]目录及文件操作
  19. MATLAB—求直线或者线段之间的交点坐标
  20. LINUX的DNS怎么设置?linux下如何修改DNS地址

热门文章

  1. [学习笔记] Miller-Rabin 质数测试
  2. 2020年假期sql excel文件 获取
  3. 2019-2020-1 20199302《Linux内核原理与分析》第八周作业
  4. VisualStudio 2019 Serials
  5. 设置make为内部命令
  6. 3-微信小程序开发(小程序的目录结构说明)
  7. [RN] React Native 下实现底部标签(支持滑动切换)
  8. 使用Sublime Text 写Processing
  9. Linux查看当前操作系统版本信息
  10. 关于python的深拷贝和浅拷贝