JavaEE--SSM--MyBatis-mybatis/hibernate哪家强?-mybatis介绍及入门

一.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进行绑定,不然光根据id可能会有重名现象 -->
<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):



测试修改用户



测试删除用户




觉得对你有帮助或者喜欢的可以点个赞哦~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stalin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值