MyBatis框架入门之(二)
在本篇文章中,没有对细节进行处理的很好,有很多晓得细节的遗漏,本文只是一个简单的快速的入门
MyBatis的快速入门
1.导入MyBatis框架jar包
2.配置文件
3.SqlSessionFactoryBuilder,传入字节输入流,构建工厂
4.SqlSessionFactory,创建SqlSession
5.SqlSession执行selectList方法查询数据
Test类:
@Test public void myBatis_QuickStart() throws IOException { InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); List<User> list = sqlSession.selectList("test.queryList"); if(list!=null && list.size()>0){ for(User user : list){ System.out.println(user); } } }
sqlMapperConfig.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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="UserMapper.xml" /> </mappers> </configuration>
UserMapper.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="test"> <select id="queryList" resultType="com.itheima.pojo.User"> select * from user </select> </mapper>
MyBatis的CRUD
这是目录结构
sqlMapperConfig.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>
<!--起别名-->
<typeAliases>
<package name="com.qingmu.domain"></package>
</typeAliases>
<!--配置数据源环境信息-->
<environments default="development">
<!--开发环境数据源配置-->
<environment id="development">
<!--
事务管理器
type="JDBC" 当前MyBatis事务管理,使用的是JDBC的事务
Connection接口方法 commit rollback
type="MANAGERED" 不管理事务,交给其他框架管理
-->
<transactionManager type="JDBC"/>
<!--
数据源
type="POOLED" 使用数据库连接池
type="UNPOOLED" 不使用连接池
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
domain包中的User类
package com.qingmu.domain; /** * @Auther:qingmu * @Description:脚踏实地,只为出人头地 * @Date:Created in 21:07 2019/3/30 */ public class User { private Integer id; private String username; private String sex; private String birthday; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getDate() { return birthday; } public void setDate(String birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", sex='" + sex + '\'' + ", date='" + birthday + '\'' + ", address='" + address + '\'' + '}'; } }
Usermapper
package com.qingmu.Mapper; import com.qingmu.domain.User; import java.util.List; /** * @Auther:qingmu * @Description:脚踏实地,只为出人头地 * @Date:Created in 21:15 2019/3/30 */ public interface UserMapper { /** * 根据id删除一条数据 */ void deleteUser(Integer id); /** * 插入一条数据 */ void insertUser(User user); /** * 通过id查询用户 * @param id * @return */ User queryUserById(Integer id); /** * 根据用户名模糊查询 */ List<User> queryUserByLike(); }
UserMapper.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="test"> <select id="queryUserById" resultType="com.qingmu.domain.User" parameterType="Integer"> select * from user where id = #{id} </select> <select id="queryUserByLike" resultType="com.qingmu.domain.User" parameterType="String"> select * from user where username like #{username} </select> <!-- < selectKey>< /selectKey> 再执行一次SQL语句' - 属性order:在insert之前或者之后执行 - keyProperty:查询的结果放在哪里显示 - resultType:查询结果的数据类型 注意: 主键自增: 1.selectKey会将得到的主键放入model的主键属性中 2.在使用主键自增的时候,不能对主键进行主动赋值,才能获取到这个主键. 3.使用user.getid()才能获取到这个返回来的那个值 主键非自增: <insert id="insert" parameterType="com.soft.mybatis.model.Customer"> 跟自增主键方式相比,这里的不同之处只有两点 1 insert语句需要写id字段了,并且 values里面也不能省略 2 selectKey 的order属性需要写成BEFORE 因为这样才能将生成的uuid主键放入到model中, 这样后面的insert的values里面的id才不会获取为空 跟自增主键相比就这点区别,当然了这里的获取主键id的方式为 select uuid() 当然也可以另写别生成函数。 <selectKey keyProperty="id" order="BEFORE" resultType="String"> select uuid() </selectKey> insert into t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age) values (#{id},#{name},#{sex},#{ceroNo},#{ceroType},#{age}) </insert> --> <insert id="insertUser" parameterType="com.qingmu.domain.User"> <selectKey order="AFTER" resultType="int" keyProperty="id"> <!-- insert语句之后执行,查询结果集直接封装pojo对象--> SELECT LAST_INSERT_ID() </selectKey> insert into user values (#{id},#{username},#{sex},#{birthday},#{address}) </insert> <!--根据id删除一条数据--> <delete id="deleteUser" parameterType="Integer" > DELETE from user where id=#{id} </delete> </mapper>
测试类:
package com.qingmu; import com.qingmu.domain.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import java.io.InputStream; import java.util.List; /** * @Auther:qingmu * @Description:脚踏实地,只为出人头地 * @Date:Created in 21:19 2019/3/30 */ public class SqlMapperTest { private SqlSessionFactory sqlSessionFactory = null; @Before public void before() { // 获取到工厂建造者对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 通过本类加载器获取到一个流对象,这个流对象用来读取SqlMapperConfig.xml文件 InputStream inputStream = SqlMapperTest.class.getClassLoader().getResourceAsStream("sqlMapperConfig.xml"); // 创建工厂对象 sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); } /** * 根据id删除一条数据 */ @Test public void deleteUser(){ SqlSession sqlSession = sqlSessionFactory.openSession(); int delete = sqlSession.delete("test.deleteUser", 8); sqlSession.commit(); System.out.println(delete); } /** * 插入一条数据 */ @Test public void insertTest() { SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User(); // 使用selectKey获取自增的主键,不能对主键进行设置 // user.setId(8); user.setSex("男"); user.setAddress("南京"); user.setUsername("赵云"); int insert = sqlSession.insert("test.insertUser", user); // 不提交不能进入数据库 sqlSession.commit(); sqlSession.close(); // 将获取到的主键进行输出 System.out.println(user.getId()); System.out.println(insert); } /** * 查询一条数据 selectOne */ @Test public void test() { SqlSession sqlSession = sqlSessionFactory.openSession(); User user = (User) sqlSession.selectOne("test.queryUserById", 2); System.out.println(user); } /** * 模糊查询 selectList */ @Test public void listTest() { SqlSession sqlSession = sqlSessionFactory.openSession(); List<User> user = sqlSession.selectList("test.queryUserByLike", "%王%"); if (user != null && user.size() > 0) { for (User o : user) { System.out.println(o); } } } }
本文中使用的数据库的结构为
在本文中,有使用selectKey标签,在新增一条数据以后,可以再将这条数据中的id取出来,以方便逻辑使用.
这个标签使用的时候,会将id封装在domian实体类中,然后使用getId(),将id获取出来.
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/p/10618601.html