1,mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2,mybatis的简单实例
mysql 建表
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) DEFAULT NULL, `sex` varchar(45) DEFAULT NULL, `birthday` date DEFAULT NULL, `address` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; SELECT * FROM testdb.user;
maven 依赖
<dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.4</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> </dependencies>
<?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> <typeAliases> <typeAlias alias="User" type="com.ys.po.User" /> </typeAliases> <!-- 数据库环境配置 --> <environments default="development"> <environment id="development"> <!-- jdbc管理 --> <transactionManager type="JDBC" /> <!-- 用什么连接池 --> <dataSource type="POOLED"> <!-- jdbc驱动 --> <property name="driver" value="com.mysql.cj.jdbc.Driver" /> <!-- 数据库名字url --> <property name="url" value="jdbc:mysql://127.0.0.1:3306/testdb" /> <!-- 数据库用户 --> <property name="username" value="root" /> <!-- 数据库用户密码 --> <property name="password" value="123456" /> </dataSource> </environment> </environments> <!-- 把User.xml注册到mybatis的配置文件中,User.xml下面配置 --> <mappers> <mapper resource="com/ys/mapper/User.xml"></mapper> </mappers> </configuration>
User 实例:
import java.util.Date; import lombok.Getter; import lombok.Setter; @Setter @Getter public class User { private int id; private String username; private String sex; private Date birthday; private String address; }
User.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="com.ys.po.userMapper"> <!-- 根据 id 查询 user 表中的数据 id:唯一标识符,此文件中的id值不能重复 resultType:返回值类型,一条数据库记录也就对应实体类的一个对象 parameterType:参数类型,也就是查询条件的类型 --> <select id="selectUserById" resultType="com.ys.po.User" parameterType="int"> <!-- 这里和普通的sql 查询语句差不多,对于只有一个参数,后面的 #{id}表示占位符,里面不一定要写id,写啥都可以,但是不要空着,如果有多个参数则必须写pojo类里面的属性 --> select * from user where id = #{id} </select> <!-- 查询 user 表的所有数据 注意:因为是查询所有数据,所以返回的应该是一个集合,这个集合里面每个元素都是User类型 --> <select id="selectUserAll" resultType="com.ys.po.User"> select * from user </select> <!-- 模糊查询:根据 user 表的username字段 下面两种写法都可以,但是要注意 1、${value}里面必须要写value,不然会报错 2、${}表示拼接 sql 字符串,将接收到的参数不加任何修饰拼接在sql语句中 3、使用${}会造成 sql 注入 --> <select id="selectLikeUserName" resultType="com.ys.po.User" parameterType="String"> select * from user where username like ‘%${value}%‘ <!-- select * from user where username like #{username} --> </select> <!-- 向 user 表插入一条数据 --> <insert id="insertUser" parameterType="com.ys.po.User"> insert into user(id,username,sex,birthday,address) value(#{id},#{username},#{sex},#{birthday},#{address}) </insert> <!-- 根据 id 更新 user 表的数据 --> <update id="updateUserById" parameterType="com.ys.po.User"> update user set username=#{username} where id=#{id} </update> <!-- 根据 id 删除 user 表的数据 --> <delete id="deleteUserById" parameterType="int"> delete from user where id=#{id} </delete> </mapper>
Test:
public class CRUDTest { //定义 SqlSession SqlSession session =null; @Before public void init(){ //定义mybatis全局配置文件 String resource = "mybatis.xml"; //加载 mybatis 全局配置文件 InputStream inputStream = CRUDTest.class.getClassLoader() .getResourceAsStream(resource); //构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //根据 sqlSessionFactory 产生 session session = sessionFactory.openSession(); } //根据id查询user表数据 @Test public void testSelectUserById(){ /*这个字符串由 userMapper.xml 文件中 两个部分构成 <mapper namespace="com.ys.po.userMapper"> 的 namespace 的值 <select id="selectUserById" > id 值*/ String statement = "com.ys.po.userMapper.selectUserById"; User user = session.selectOne(statement, 1); System.out.println(user); session.close(); } //查询所有user表所有数据 @Test public void testSelectUserAll(){ String statement = "com.ys.po.userMapper.selectUserAll"; List<User> listUser = session.selectList(statement); for(User user : listUser){ System.out.println(user); } session.close(); } //模糊查询:根据 user 表的username字段 @Test public void testSelectLikeUserName(){ String statement = "com.ys.po.userMapper.selectLikeUserName"; List<User> listUser = session.selectList(statement, "%t%"); for(User user : listUser){ System.out.println(user); } session.close(); } //向 user 表中插入一条数据 @Test public void testInsertUser(){ String statement = "com.ys.po.userMapper.insertUser"; User user = new User(); user.setUsername("Bob"); user.setSex("女"); session.insert(statement, user); //提交插入的数据 session.commit(); session.close(); } //根据 id 更新 user 表的数据 @Test public void testUpdateUserById(){ String statement = "com.ys.po.userMapper.updateUserById"; //如果设置的 id不存在,那么数据库没有数据更改 User user = new User(); user.setId(4); user.setUsername("jim"); session.update(statement, user); session.commit(); session.close(); } //根据 id 删除 user 表的数据 @Test public void testDeleteUserById(){ String statement = "com.ys.po.userMapper.deleteUserById"; session.delete(statement,4); session.commit(); session.close(); } }
原文:https://www.cnblogs.com/pickKnow/p/11158845.html