mybatis学习(1)
使用maven导入mybatis的依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency>
在src/main/resource下创建 mybatis 的配置文件
<?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> <!-- 导入配置文件 --> <properties resource="jdbc.properties"></properties> <settings> <!-- 开启日志 --> <setting name="logImpl" value="LOG4J"></setting> <!-- <setting name="logImpl" value="STDOUT_LOGGING"></setting> --> </settings> <!-- 配置mybatis的环境 --> <environments default="mysql"> <!-- 针对mysql环境的具体的配置 --> <environment id="mysql"> <!-- 使用jdbc事务管理方式 --> <transactionManager type="JDBC"/> <!-- 使用连接池的方式配置数据源 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </dataSource> </environment> </environments> <!-- 引入接口映射文件 --> <mappers> <mapper resource="accountMapper.xml"/> </mappers> </configuration>
创建一个用于测试的接口类
public interface IMybatis { List<Account> findAll(); Account selectById(Integer uid); int update(Account acc); int addAccount(Account acc); int delById(Integer uid); List<Account> findByName(String uname); List<Account> findByName2(String uname); int findTotal(); List<ResultUA> selectUa(); }
然后创建 mapper 文件,在namespace里面写上对应的接口类
<?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"> <!-- namespace的值为接口的全路径名 --> <mapper namespace="pers.lyh.mybatis.IMybatis"> <!-- 查询的话使用select标签, id表示接口中对应的方法名, resultType表示结果的类型, parameterType表示参数的类型 --> <select id="findAll" resultType="pers.lyh.pojo.Account"> SELECT * FROM s </select> <select id="selectById" resultType="pers.lyh.pojo.Account" parameterType="int"> SELECT * FROM s WHERE UID=#{uid} </select> <!-- 添加使用insert标签 --> <insert id="addAccount" parameterType="pers.lyh.pojo.Account"> <!-- 配置保存时获取插入的 id, 新增用户后,同时还要返回当前新增用户的 id 值, 因为 id 是由数据库的自动增长来实现的, 所以就相当于我们要在新增后将自动增长 auto_increment 的值返回。 --> <selectKey keyColumn="uid" keyProperty="uid" resultType="int"> select last_insert_id(); </selectKey> INSERT INTO s values(#{uid},#{uname},#{money}) </insert> <!-- 更新使用update标签 --> <update id="update" parameterType="pers.lyh.pojo.Account"> update s set uname=#{uname},money=#{money} where uid=#{uid} </update> <!-- 删除 使用delete标签--> <delete id="delById" parameterType="int"> delete from s where uid=#{uid} </delete> <!-- 模糊查询 --> <!-- #{} 和 ${} 的区别: * #{} 表示一个占位符号 通过#{}可以实现 preparedStatement 向占位符中设置值, * 自动进行 java 类型和 jdbc类型转换,#{}可以有效防止 sql 注入。 #{}可以接收简 * 单类型值或 pojo 属性值。 如果 parameterType传输单个简单类型值,#{}括号中可 * 以是 value 或其它名称。 ${} 表示拼接 sql 串通过${}可以将 parameterType传 * 入的内容拼接在 sql中且不进行 jdbc 类型转换, ${}可以接收简 单类型值或 pojo 属 * 性值,如果 parameterType传输单个简单类型值,${}括号中只能是 value。 * --> <select id="findByName" resultType="pers.lyh.pojo.Account" parameterType="String"> select * from s where uname like #{uname} </select> <select id="findByName2" resultType="pers.lyh.pojo.Account" parameterType="String"> select * from s where uname like '%${value}%' </select> <!-- 查询总记录数 --> <select id="findTotal" resultType="int"> select count(0) from s; </select> <!-- 使用resultMap来封装数据 --> <resultMap type="pers.lyh.vo.ResultUA" id="ua"> <!-- <id column="" property="" /> 对应主键 ,<result>对应其他的列(属性) --> <result column="uname" property="uname" /> <result column="upwd" property="upwd" /> <result column="money" property="money" /> </resultMap> <!-- 多表联查 --> <select id="selectUa" resultMap="ua"> SELECT s.uname, upwd ,money FROM s, s_user WHERE s.uid=s_user.`uid` </select> </mapper>
创建测试类进行测试
public class MybatisTest { IMybatis mapper; InputStream stream; SqlSession openSession; @Before public void befor() throws IOException { // 1.读取SQLMapper.xml文件资源内容 stream = Resources.getResourceAsStream("mybatis-config.xml"); // 2.创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 3.创建SQLSessionFactory SqlSessionFactory sessionFactory = builder.build(stream); // 4.打开sessionFactory, openSession(true)中的参数是是否打开自动提交,如果没有设置自动提交,就需要手动提交 openSession = sessionFactory.openSession(true); // openSession.commit(); //手动提交方法commit // 5.通过动态代理的方式直接获取接口 mapper = openSession.getMapper(IMybatis.class); } // 6.执行方法 /** * 测试查找所有方法 */ @Test public void findAllTest() { List<Account> list = mapper.findAll(); for (Account account : list) System.out.println(account.toString()); } /** * 测试添加方法 */ @Test public void addTest() { Account acc = new Account(3, "Peter", 1000.0); int result = mapper.addAccount(acc); System.out.println(result + " --- " + acc.getUid()); } /** * 测试单一查找方法 */ @Test public void selectTest() { Account account = mapper.selectById(3); System.out.println(account.toString()); } /** * 测试修改方法 */ @Test public void updateTest() { Account account = mapper.selectById(1); System.out.println(account.toString()); account.setUname("Lemon"); account.setMoney(2000.0); mapper.update(account); System.out.println(account.toString()); } /** * 删除测试 */ @Test public void delTest() { mapper.addAccount(new Account(5, "test", 1.0)); Account acc = mapper.selectById(5); System.out.println(acc == null ? "添加失败" : "添加成功"); mapper.delById(5); System.out.println(mapper.selectById(5) == null ? "删除成功" : "删除失败"); } /** * 模糊查询测试 */ @Test public void findTest() { List<Account> list = mapper.findByName("%t%"); for (Account account : list) { System.out.println(account.toString()); } } @Test public void findTest2() { List<Account> list = mapper.findByName2("t"); for (Account account : list) { System.out.println(account.toString()); } } @Test public void countTest() { System.out.println(mapper.findTotal()); } @Test public void selectUaTest() { List<ResultUA> list = mapper.selectUa(); for (ResultUA resultUA : list) { System.out.println(resultUA.toString()); } } // 7.释放资源 @After public void after() throws IOException { openSession.close(); stream.close(); } }
坚持,向着更优秀的人前进.

浙公网安备 33010602011771号