=====================Lesson2 =============================
1 spring中的注解方式
2 mybatis框架简介
3 入门程序
4 增,删,改,查
==============================================================
==== 1 spring中的注解方式
它是从spring 2.5开始出现的
1) 要引入名称空间 context
2) 开启自动扫描
<context:component-scan base-package="com.dao" />
<context:component-scan base-package="com.controller" />
自动扫描,会把指定的包及其子包下的类纳入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")
==== 2 mybatis 框架简介
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 一点关系也没有
==== 3 入门程序
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 下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 读入属性文件 -->
<properties resource="db.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.userName}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
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
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx">
<select id="getUserById" parameterType="int" resultType="com.beans.UserInfo">
select * from userInfo where id = #{id}
</select>
</mapper>
注意三个地方
(1)namespace 不要忘了
(2)占位不是用? 而是换成了 #{id}
(3)不要忘了在主配置文件 mybatis-config.xml 中引入这个映射文件
<mappers>
<mapper resource="mappings/UserInfo.xml"/>
</mappers>
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();
}
}
==== 4 增,删,改,查
上例中 的 parameterType="int" 是可以省去的,如果不省去,
在传参的时候,一定要注意类型要匹配 比如 1 不能传成 "1"
select * from userInfo where id = #{id}
后面的#{id} 这个占位,如果传的参数是简单类型,则#{} 中间的
内容可以任意
//增删改查
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx">
<select id="getUserById" parameterType="int" resultType="com.beans.UserInfo">
select * from userInfo where id = #{dog}
</select>
<insert id="addUser" parameterType="com.beans.UserInfo" >
insert into userInfo (userName,password,note) values(#{userName},#{password},#{note} )
</insert>
<update id="updateUser" parameterType="com.beans.UserInfo" >
update userinfo set userName=#{userName}, password=#{password},note=#{note} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from userInfo where id=#{id}
</delete>
<select id="getAll" resultType="com.beans.UserInfo">
select * from userinfo
</select>
</mapper>
测试
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<UserInfo> 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",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("
评论0