1 设计学生信息表 有如下字段 id stuName age school address
2 编写基于 mybatis 的程序,完成对该表的增,删,改,查,查询全部等功能,并调试通过。
它是从spring 2.5开始出现的
1) 要引入名称空间 context
2) 开启自动扫描
自动扫描,会把指定的包及其子包下的类纳入spring容器管理
,但并不是全部,只有带有以下注解的类才会被纳入spring管理
@Controller //用于控制层
@Service //用于业务层
@Repository //用于持久层
@Component //用于其他组件
经过扫描纳入spring管理的对象,默认的名字是类名首字线小写
关于Resource 注解
它的作用,就是帮我们注入依赖对象的,比如
@Controller
public class UserController {
//这个注解,是专门用来注入依赖对象的
@Resource(name="userDaoImplMySql")
private IUserDao dao;
public void service() {
dao.addUser();
dao.addUser();
dao.delUser();
}
}
说明:
1) @Resource 是 javax.annotation.Resource 出身
2) @Resource 默认按名称注入,然后按类型注入,如果指明了
名称,则严格按名称
3) 在jdk9及以后的版本中,使用@Resource要额外引入jar
另一个常用注解:
@Autowired 它的功能和 @Resource 基本相同,它的出身是
org.springframework.beans.factory.annotation.Autowired
它默认是按类型进行匹配
如果也想按名称进行注入,要和另一个注解一起使用
@Autowired @Qualifier("userDaoImplOracle")
mybatis 是apache 的一个开源项目,它是一个半ORM框架
ORM: 对象模型 到 关系模型之间的映射
对象模型 其实就是java中的类的结构
class Student{
int id;
String stuName;
int age;
String school;
}
关系模型 其实就是数据库中的表结构
create table (id int, stuName varchar(20),age int,school varchar(30))
一个student 对象(对象模型) 和表中的一条数据对应(关系模型)
mybatis 中的几个重要对象
1) 主配置文件
mybatis-config.xml //名称不是绝对
配置数据源,事务等运行环境,引入其他的映射文件
2) SqlSessionFactory
会话工厂,根据配置文件创建的,用来创建SqlSession
3) SqlSession
称为会话,是一个接口,帮我们进行数据库操作
增,删,改,查
它就相当于JDBC中的 Connection 对象
要注意,它和javaweb中的 Session 一点关系也没有
1) 导包
mybatis-3.5.5.jar
mysql-connector-java-5.1.7-bin.jar
2) 配置数据库相关的配置文件,我们可以把所有的配置文件
都放在一个源文件夹下
建一个 叫 config 的 "源" 文件夹,和src平级
在它下面建 db.properties 这个的一个数据库配置文件
内容:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=UTF8
db.userName=root
db.password=root
#db.driver=com.mysql.cj.jdbc.Driver
#db.url=jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=UTF8&serverTimezone=UTC
3) 编写mybatis的主配置文件 mybatis-config.xml
放在 config 下
"http://mybatis.org/dtd/mybatis-3-config.dtd">
4) 编写映射文件 (会有多个,通常来说,一个表一个)
可以在config下,再建一个目录,叫 mappings,专门用来放
这些映射文件
比如 对实体类UserInfo编写配置文件
public class UserInfo {
private int id;
private String userName;
private String password;
private String note;
... get set 方法
... toString()..
}
在 config/mappings/ 下建 UserInfo.xml
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
注意三个地方
(1)namespace 不要忘了
(2)占位不是用? 而是换成了 #{id}
(3)不要忘了在主配置文件 mybatis-config.xml 中引入这个映射文件
5) 测试
public class Test {
public static void main(String[] args) throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
//创建会话工厂
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//创建会话 ,它是线程不安全的,一定要做成局部变量
SqlSession session =factory.openSession();
//使用session进行数据库操作
UserInfo user=session.selectOne("xxx.getUserById",1);
System.out.println(user);
session.close();
}
}
==== 增,删,改,查
上例中 的 parameterType="int" 是可以省去的,如果不省去,
在传参的时候,一定要注意类型要匹配 比如 1 不能传成 "1"
select * from userInfo where id = #{id}
后面的#{id} 这个占位,如果传的参数是简单类型,则#{} 中间的
内容可以任意
//增删改查
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
insert into userInfo (userName,password,note) values(#{userName},#{password},#{note} )
update userinfo set userName=#{userName}, password=#{password},note=#{note} where id=#{id}
delete from userInfo where id=#{id}
测试
public class Test {
public static void main(String[] args) throws IOException {
//testGet() ;
//testAdd();
//testUpdate();
//testDelete();
testGetAll();
}
static void testGetAll()throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
List
for(UserInfo u:userList) {
System.out.println(u);
}
session.close();
}
static void testDelete() throws IOException{
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
int result=session.delete("xxx.deleteUser",4);
System.out.println(result==1?"删除成功":"删除失败");
session.commit();
session.close();
}
static void testUpdate() throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
UserInfo user=session.selectOne("xxx.getUserById",4);
user.setUserName("川建国");
user.setPassword("cjg");
user.setNote("祖国在他的心中");
int result=session.update("xxx.updateUser",user);
System.out.println(result==1?"更新成功":"更新失败");
session.commit();
session.close();
}
static void testAdd() throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
UserInfo user=new UserInfo();
user.setUserName("赵明明");
user.setPassword("zmm");
user.setNote("超级管理员");
int result =session.insert("xxx.addUser",user);
System.out.println(result==1?"添加成功":"添加失败");
//对于增,删,改类的方法,一定要提交事务才行
session.commit();
session.close();
}
static void testGet() throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
//创建会话工厂
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//创建会话 ,它是线程不安全的,一定要做成局部变量
SqlSession session =factory.openSession();
//使用session进行数据库操作
UserInfo user=session.selectOne("xxx.getUserById",1);
System.out.println(user);
session.close();
}
}
Test.java
package com.beans;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
public static void main(String[] args) throws IOException {
//获得指定ID的学生信息
//testGet() ;
//增加指定ID的学生信息
//testAdd();
//更新指定ID的学生信息
//testUpdate();
//删除指定ID的学生信息
//testDelete();
//获得所有学生的信息
//testGetAll();
}
static void testGetAll()throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
List userList=session.selectList("xxx.getAll");
for(UserInfo u:userList) {
System.out.println(u);
}
session.close();
}
static void testDelete() throws IOException{
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
int result=session.delete("xxx.deleteUser",3);
System.out.println(result==1?"删除成功":"删除失败");
session.commit();
session.close();
}
static void testUpdate() throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
UserInfo user=session.selectOne("xxx.getUserById",8);
user.setStuName("小红");
user.setage(12);
user.setschool("江南哈师大");
user.setAddress("黑龙江佳木斯");
int result=session.update("xxx.updateUser",user);
System.out.println(result==1?"更新成功":"更新失败");
session.commit();
session.close();
}
static void testAdd() throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
UserInfo user=new UserInfo();
user.setId(3);
user.setStuName("天羽");
user.setage(12);
user.setschool("黑大");
user.setAddress("齐齐哈尔");
int result =session.insert("xxx.addUser",user);
System.out.println(result==1?"添加成功":"添加失败");
//对于增,删,改类的方法,一定要提交事务才行
session.commit();
session.close();
}
static void testGet() throws IOException {
InputStream in= Resources.getResourceAsStream("mybatis-config.xml");
//创建会话工厂
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//创建会话 ,它是线程不安全的,一定要做成局部变量
SqlSession session =factory.openSession();
//使用session进行数据库操作
UserInfo user=session.selectOne("xxx.getUserById",8);
System.out.println(user);
session.close();
}
}
UserInfo.java
package com.beans;
public class UserInfo {
private int id;
private String stuName;
private int age;
private String school;
private String address;
public String toString() {
return "stuInfo [id=" + id + ", stuName=" + stuName + ", age=" + age + ", school=" + school+ ",address=" +address+ " ]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getage() {
return age;
}
public void setage(int age) {
this.age = age;
}
public String getschool() {
return school;
}
public void setschool(String school) {
this.school = school;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
1、获得指定ID的学生信息 testGet() ;
2、增加指定ID的学生信息 testAdd();
3、更新指定ID的学生信息
testUpdate();
4、删除指定ID的学生信息
testDelete();
5、 获得所有学生的信息
testGetAll();