mybatis入门案例
mybatis入门案例
主要目的:CRUD实现, 在实际项目中mybatis的使用
创建项目
- 创建项目 ,新建一个Maven Project,在Create a simple project(skip archetype selection)前的框框打上对勾,再点击下一步,Groupid—组名:指当前项目属于哪个分组,通常组名定义格式为:域名倒置+模块化;Atrifactid—项目名:不是整体的项目名称(可以还是模块,针对模块重新命子项目名称);Version—版本:可自行选择,本次所选1.1;Packaging—设置项目的本质属于哪一种项目(eg java项目(jar),web项目(war),父项目(pom))本项目选择war(跟原生态jdbc作比较);
- 引入jar包在pom.xml文件中实现配置,而maven通过配置加载jar包(下载、引入),
<!-- 配置,告诉maven项目需要什么jar包 -->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 用于测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
- 需求:实现国家表的查询,对应表的类—实体类
- 创建两种配置文件:核心文件、映射文件
核心文件中关键的配置:驱动、url–找到数据库的路径、用户名、密码;
映射文件中关键的配置是SQL语句
5.测试.与数据库的连接、发送的SQL语句数据库是否能够收到、查询结果是否能够获取回来(从程序发送SQL到数据库–可能有参数,数据库接收到SQL做出处理、处理结果送回程序)
CRUD
C----create(insert)—增加操作
实体类不变
//和country表一一对应
public class Country {
//类中的属性和表中的字段一一对应
private Integer cid;//id
private String cname;//名称
private String caddress;//地址
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getCaddress() {
return caddress;
}
public void setCaddress(String caddress) {
this.caddress = caddress;
}
}
核心文件不变
<environments default="development">
<!-- 环境 -->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 如果mysql数据库是8.0之上,那么驱动也要设置相应的 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 指定要连接的数据库 -->
<!-- 如果有同学的mysql数据库是8.0以上版本,注意?后面的参数项要多添加一个时区配置项 -->
<property name="url" value="jdbc:mysql://localhost:3306/test1?characterEncoding=utf8"/>
<!-- 数据库登录时的用户名和密码 -->
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件,把映射文件加载到核心文件中来,读取核心文件的同时映射文件的内容也会被读取到 -->
<mappers>
<mapper resource="mappers/country.xml"/>
</mappers>
映射文件
<mapper namespace="country">
<!-- 增加操作 -->
<!-- 把新增操作的值(数据),考虑保存到一个对象中(可以在程序中操作对象),然后把对象传入到此处,从对象中的属性中获取到值,传递到对应的位置 -->
<!-- parameterType属性的作用是指定传入数据时,封装数据的对象所属的类型 -->
<!-- 占位符 -->
<insert id="insertCountry" parameterType="com.offcn.bean.Country">
insert into country(cname,caddress) value(#{cname},#{caddress})
</insert>
</mapper>
测试
@Test
public void insertTest() throws IOException{
String name = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(name);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
//准备数据
Country cou = new Country();
cou.setCname("东晋");
cou.setCaddress("南京");
//第一个参数指定SQL语句的位置
session.insert("country.insertCountry", cou);
//提交---手动提交,mybatis框架会先把自动提交关闭,然后手动提交结束之后再重新开启自动提交
session.commit();
session.close();
}
D—delete—删除:按照id实现删除
映射文件的配置
<!-- 删除操作 -->
<!-- 按照iD删除 -->
<delete id="deleteById" parameterType="int">
delete from country where cid = #{id}
</delete>
测试
//删除测试
@Test
public void deleteTest() throws IOException{
String name = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(name);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
//条件值只有一个,不需要封装对象中
session.delete("country.deleteById", 7);
session.commit();
session.close();
}
U—update—修改操作:按照id实现数据的修改
映射文件配置
<!-- 修改操作 -->
<!-- 按照id实现修改数据 -->
<update id="updateCountryById" parameterType="com.offcn.bean.Country">
update country set cname = #{cname},caddress = #{caddress} where cid = #{cid}
</update>
测试
//修改测试
@Test
public void updateTest() throws IOException{
String name = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(name);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Country cou = new Country();
cou.setCid(3);
cou.setCname("吴");
cou.setCaddress("建康");
//条件值只有一个,不需要封装对象中
session.update("country.updateCountryById", cou);
session.commit();
session.close();
}
R—retrieve(select)—查询:按照id实现查询
映射文件配置
<!-- 按照id查询数据 -->
<select id="selectCountryById" parameterType="int" resultType="com.offcn.bean.Country">
select * from country where cid = #{id}
</select>
测试
@Test
public void selectByIdTest() throws IOException{
String name = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(name);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
//条件值只有一个,不需要封装对象中
Country c = session.selectOne("country.selectCountryById", 1);
System.out.println(c.getCid() + "--" + c.getCname() + "--" + c.getCaddress());
session.commit();
session.close();
}