一.mybatis的介绍:
mybatis最初是apache的开源项目ibatis,后来被迁移到了Google公司,并改名为mybatis.它在GitHub上可以进行下载.
mybatis是一个优秀的持久层框架.它直接对jdbc进行了封装,简化了我们使用jdbc时的一些冗余的步骤(创建connection,执行statement...),让我们只需关注SQL本身.
mybatis通过xml/注解方式配置使用jdbc时的冗余步骤,通过pojo对象和statement中的sql进行映射并生成可执行sql语句,并将执行后的结果映射成pojo对象返回.
二.mybatis与hibernate的区别:
mybatis的优点:
简单易学,需要程序员手动编写原生sql语句,灵活性高,适合软件需求变化频繁的互联网项目,企业运行项目.
mybatis的缺点:
它不完全是一个ORM框架,数据无关性差,不能直接切换其他数据库进行使用.如果想支持多数据库软件则需要定义多套sql映射文件,工作量大,比较麻烦.
hibernate的优点:
hibernate是一个完全的ORM框架,对象关系映射能力较强,数据无关性好,对于需求较为固定的项目,如政府,医院的内部系统.
hibernate的缺点:
hibernate比较复杂,学习难度较大,想要完全掌握需要大量的学习和工作经验.
总结:其实mybatis与hibernate各有利弊,不能有mybatis完胜hibernate的想法.我们在实际应用中选择哪个框架需要根据不同的需求进行分析,从而选择出最适合自己项目的框架.
三.使用mybatis进行增删改查(数据库使用mysql):
1.创建项目(普通java项目即可)
2.导入jar包
mysql的连接包
mybatis包及其依赖包
3.创建数据库及user表.
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(40) DEFAULT NULL,
`sex` varchar(40) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
`address` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
4.根据user表创建pojo类
public class User {
private Integer id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
//自己生成get/set方法
//自己生成tostring方法
}
5.创建User的映射文件 User.xml 注: 与User在同一个包下
<?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="test">
<!-- parameterType:入参类型,简单的直接写,复杂的加上类全名 -->
<!-- resultType:返回类型,类全名/数据库表字段名与POJO对象中属性名一致(自动映射) -->
<!-- #{value}占位符 输入参数的数据类型如果是基本类型或简单类型 #{随意写} 特点:防止sql注入 -->
<!-- ${} 字符串拼接 输入参数的数据类型如果是基本类型或简单类型 ${value} 页面传递过来的话,不防Sql注入 -->
<select id="findUserById" parameterType="Integer" resultType="cn.asiainfo.mybatis.pojo.User">
select * from user where id = #{v};
</select>
<!-- 两种写法 "%"#{v}"%"/'%${value}%' -->
<select id="findUserByName" parameterType="String" resultType="cn.asiainfo.mybatis.pojo.User">
select * from user where username like "%"#{v}"%"
</select>
<!-- useGeneratedKeys="true" keyProperty="对应的主键的对象" 当主键是自增的情况下,添加一条记录的同时,其主键是不能使用的,为了使用主键需要加上这两个配置 -->
<insert id="insertUser" parameterType="cn.asiainfo.mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
insert into user
(username,birthday,sex,address)
values
(#{username},#{birthday},#{sex},#{address});
</insert>
<update id="updateUser" parameterType="cn.asiainfo.mybatis.pojo.User">
update user set
username = #{username},
sex = #{sex},
birthday = #{birthday},
address = #{address}
where
id = #{id}
</update>
<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
</delete>
</mapper>
6.创建mybatis的主配置文件SqlMapConfig.xml
<?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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/day91mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- Mapper的位置 n个 -->
<mappers>
<mapper resource="User.xml" />
</mappers>
</configuration>
7.创建测试类
public class MyBatisFirst {
private SqlSessionFactory sqlSessionFactory;
//创建工厂
@Before
public void ininFactory() throws Exception {
// 定义数据源
String resource = "SqlMapConfig.xml";
// 获取输入流
InputStream in = Resources.getResourceAsStream(resource);
// 创建工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
}
// 根据id查询用户
@Test
public void findUserById() {
// 获取session
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询 test.findUserById表示test包下配置的findUserById方法,
User user = sqlSession.selectOne("test.findUserById", 1);
// 输出结果
System.out.println(user);
}
// 根据name查询用户
@Test
public void findUserByName() {
// 获取session
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询
List<User> list = sqlSession.selectList("test.findUserByName", "孙");
// 输出查询结果
for (User user : list) {
System.out.println(user);
}
}
// 插入用户
@Test
public void insertUser() {
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建pojo对象
User user = new User();
user.setUsername("猪八戒");
user.setSex("公猪");
user.setAddress("高老庄");
user.setBirthday(new Date());
// 执行插入
sqlSession.insert("test.insertUser", user);
// 获取刚才插入时的id
System.out.println(user.getId());
sqlSession.commit();
}
// 修改用户
@Test
public void updateUser() {
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建pojo对象
User user = new User();
user.setId(4);
user.setUsername("卷帘大将");
user.setSex("男");
user.setAddress("南天门");
user.setBirthday(new Date());
// 执行操作
sqlSession.update("test.updateUser", user);
// 提交事务
sqlSession.commit();
System.out.println("修改用户成功");
// 删除用户
@Test
public void deleteUser() {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("test.deleteUser", 7);
// 提交事务
sqlSession.commit();
System.out.println("删除用户成功");
}
8.测试结果:
测试前数据库数据如下:
测试根据id查询user
测试根据name进行模糊查询user
测试新增用户(返回的7是新插入的数据主键id):
测试修改用户
测试删除用户
觉得对你有帮助或者喜欢的可以点个赞哦~~