<resultMap>标签的结构就是上一个随笔的结构。
mysql数据库中新建t_user表,结构如下:
id为自增的
User.java
1 package com.itheima.po; 2 3 public class User { 4 5 6 private Integer id; 7 private String name; 8 private Integer age; 9 10 11 @Override 12 public String toString() { 13 return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; 14 } 15 16 public Integer getId() { 17 return id; 18 } 19 public void setId(Integer id) { 20 this.id = id; 21 } 22 public String getName() { 23 return name; 24 } 25 public void setName(String name) { 26 this.name = name; 27 } 28 public Integer getAge() { 29 return age; 30 } 31 public void setAge(Integer age) { 32 this.age = age; 33 } 34 35 36 37 38 }
可以看到User类中的属性和数据库表列属性是不一样的,所以要用<resultMap>标签。
UserMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <mapper namespace="com.itheima.po.User"> 7 <resultMap type="com.itheima.po.User" id="resultMap"> 8 <id property="id" column="t_id"></id> 9 <id property="name" column="t_name" /> 10 <id property="age" column="t_age"/> 11 </resultMap> 12 <select id="findAllUser" resultMap="resultMap"> 13 select * from t_user 14 </select> 15 </mapper>
type是你都pojo类,就是User类,id为唯一标识,用于select的引用,<id>中的property是User中的属性值,column是数据库对应的列。
mybatis-config.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> <properties resource="db.properties"></properties> <!--配置环境,默认环境id为mysql --> <environments default="mysql"> <!--配置id为mysql的数据库环境 --> <environment id="mysql"> <!--使用jdbc的事务管理 --> <transactionManager type="JDBC"/> <!--数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!--可以配置多个mapper --> <mappers> <mapper resource="com/itheima/po/CustomerMapper.xml"/> <mapper resource="com/itheima/po/UserMapper.xml"/> </mappers> </configuration>
MybatisTest.java
1 package com.itheima.test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 import org.junit.Test; 12 13 import com.itheima.po.Customer; 14 import com.itheima.po.User; 15 import com.itheima.utils.MybatisUtils; 16 17 //mybatis入门程序测试 18 19 public class MybatisTest { 20 21 22 23 @Test 24 public void findAllUser() { 25 SqlSession sqlSession=MybatisUtils.getSqlSession(); 26 List<User> users= sqlSession.selectList("com.itheima.po.User.findAllUser"); 27 for(User user:users) { 28 System.out.println(user); 29 } 30 sqlSession.close(); 31 } 32 }
其他需要的MybatisUtils和两个properties文件上一个随笔都有。
动态sql项目结构:
对sql语句通过拼装,可以更高效实现数据库的操作。
Customer.java
1 package com.itheima.po; 2 3 public class Customer { 4 private Integer id; 5 private String username; 6 private String jobs; 7 private String phone; 8 @Override 9 public String toString() { 10 return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]"; 11 } 12 13 public Integer getId() { 14 return id; 15 } 16 public void setId(Integer id) { 17 this.id = id; 18 } 19 public String getUsername() { 20 return username; 21 } 22 public void setUsername(String username) { 23 this.username = username; 24 } 25 public String getJobs() { 26 return jobs; 27 } 28 public void setJobs(String jobs) { 29 this.jobs = jobs; 30 } 31 public String getPhone() { 32 return phone; 33 } 34 public void setPhone(String phone) { 35 this.phone = phone; 36 } 37 38 }
MybatisUtils.java
1 package com.itheima.utils; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.Reader; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 12 public class MybatisUtils { 13 private static SqlSessionFactory sqlSessionFactory=null; 14 15 //初始化sqlSessionFactory 16 static { 17 try { 18 Reader reader=Resources.getResourceAsReader("mybatis-config.xml"); 19 sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); 20 } catch (IOException e) { 21 // TODO Auto-generated catch block 22 e.printStackTrace(); 23 } 24 } 25 26 27 public static SqlSession getSqlSession() { 28 return sqlSessionFactory.openSession(); 29 30 } 31 }
MybatisTest.java
package com.itheima.test; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import com.itheima.po.Customer; import com.itheima.utils.MybatisUtils; //mybatis入门程序测试 public class MybatisTest { @Test public void findCustomerByNameAndJobs() { SqlSession sqlsession=MybatisUtils.getSqlSession(); Customer customer=new Customer(); customer.setUsername("sam"); customer.setJobs("doctor"); List<Customer> customers=sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByNameAndJobs", customer); for (Customer customer2 : customers) { System.out.println(customer2); } sqlsession.close(); } @Test public void findCustomerByNameOrJobs() { SqlSession sqlsession=MybatisUtils.getSqlSession(); Customer customer=new Customer(); //customer.setUsername("sam"); //customer.setJobs("doctor"); List<Customer> customers=sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByNameOrJobs", customer); for (Customer customer2 : customers) { System.out.println(customer2); } sqlsession.close(); } @Test public void updateCustomer() { SqlSession sqlsession=MybatisUtils.getSqlSession(); Customer customer=new Customer(); customer.setId(1); customer.setUsername("DaMing"); customer.setJobs("doctor"); customer.setPhone("123456"); int row=sqlsession.update("com.itheima.mapper.CustomerMapper.updateCustomer", customer); if(row>0) { System.out.println("更新成功"); }else { System.out.println("更新失败"); } sqlsession.commit(); sqlsession.close(); } //编号批量查询 @Test public void findCustomerByIds() { SqlSession sqlsession=MybatisUtils.getSqlSession(); List<Integer> integers=new ArrayList<Integer>(); integers.add(1); integers.add(3); integers.add(5); List<Customer> customers= sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByIds", integers); for (Customer customer : customers) { System.out.println(customer); } sqlsession.close(); } public void findCustomerByName() { SqlSession sqlsession=MybatisUtils.getSqlSession(); Customer customer=new Customer(); customer.setUsername("j"); List<Customer> customers=sqlsession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByName",customer); for (Customer customer2 : customers) { System.out.println(customer2); } sqlsession.close(); } }
CustomerMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <!--namespace表示命名空间,唯一 --> 7 <mapper namespace="com.itheima.mapper.CustomerMapper"> 8 <!-- if元素和where的使用 --> 9 <select id="findCustomerByNameAndJobs" 10 resultType="com.itheima.po.Customer" 11 parameterType="com.itheima.po.Customer"> 12 select * from t_customer 13 <where> 14 <if test="username !=null and username !=''"> 15 and username like concat('%',#{username},'%') 16 </if> 17 <if test="jobs !=null and jobs !=''"> 18 and jobs=#{jobs} 19 </if> 20 </where> 21 22 </select> 23 24 <!--choose标签的使用 (以及when和otherwise) --> 25 <select id="findCustomerByNameOrJobs" resultType="com.itheima.po.Customer" parameterType="com.itheima.po.Customer"> 26 select * from t_customer 27 <trim prefix="where" prefixOverrides="and"> 28 <choose> 29 <when test="username !=null and username !=''"> 30 and username like concat('%',#{username},'%') 31 </when> 32 <when test="jobs !=null and jobs !=''"> 33 and jobs=#{jobs} 34 </when> 35 <otherwise> 36 and phone is not null 37 </otherwise> 38 </choose> 39 </trim> 40 </select> 41 42 <!--set标签的使用 --> 43 <update id="updateCustomer" parameterType="com.itheima.po.Customer"> 44 update t_customer 45 <set> 46 <if test="username !=null and username !=''"> 47 username=#{username}, 48 </if> 49 <if test="jobs !=null and jobs !=''"> 50 jobs=#{jobs}, 51 </if> 52 <if test="phone !=null and jobs !=''"> 53 phone=#{phone}, 54 </if> 55 </set> 56 where id=#{id} 57 </update> 58 <!--foreach标签的使用 --> 59 <select id="findCustomerByIds" parameterType="List" resultType="com.itheima.po.Customer"> 60 select * from t_customer where id in 61 <foreach collection="list" item="id" 62 index="index" open="(" separator="," close=")" > 63 #{id} 64 </foreach> 65 </select> 66 <!--blind标签 --> 67 <select id="findCustomerByName" parameterType="com.itheima.po.Customer" 68 resultType="com.itheima.po.Customer"> 69 <bind name="pattern_username" value="'%'+_parameter.getUsername()+'%'"/> 70 select * from t_customer where username like #{pattern_username} 71 </select> 72 73 </mapper>
mybatis-config.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <properties resource="db.properties"></properties> 7 <!--配置环境,默认环境id为mysql --> 8 <environments default="mysql"> 9 <!--配置id为mysql的数据库环境 --> 10 <environment id="mysql"> 11 <!--使用jdbc的事务管理 --> 12 <transactionManager type="JDBC"/> 13 <!--数据库连接池 --> 14 <dataSource type="POOLED"> 15 <property name="driver" value="${jdbc.driver}"/> 16 <property name="url" value="${jdbc.url}"/> 17 <property name="username" value="${jdbc.username}"/> 18 <property name="password" value="${jdbc.password}"/> 19 </dataSource> 20 </environment> 21 </environments> 22 <!--可以配置多个mapper --> 23 <mappers> 24 <mapper resource="com/itheima/mapper/CustomerMapper.xml"/> 25 </mappers> 26 </configuration>
两个properties资源文件也是和前面的博客相同。