更多精彩文章歡迎關注公眾號“Java之康庄大道”
1.數據庫設計
2.項目結構(針對User不用管Blogger)
User.java
package com.yunqing.mybatis.bean; public class User { private Integer id; private String name; private String gender; private String email; //構造函數 public User() { } //帶參構造函數 public User(Integer id, String name, String gender, String email) { this.id = id; this.name = name; this.gender = gender; this.email = email; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", gender='" + gender + '\'' + ", email='" + email + '\'' + '}'; } }
UserMapper.java接口類
package com.yunqing.mybatis.dao; import com.yunqing.mybatis.bean.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserMapper {
//這種寫法可以用於簡單的sql操作,復雜的請寫在sql的xml映射文件中 @Select("select * from t_user") List<User> getAllUser(); User getUserById(Integer id);
//mybatis的增刪改可以定義Integer|Long|boolean三種返回值類型 void insertUser(User user); void updateUser(User user); void deleteUserById(Integer id); }
UserMapper.xml(需要與接口類同名,批量注冊到mybatis-config.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"> <!-- namespace:命名空間,指定為接口的全類名 selectUserById:唯一標識 resultType:返回值類型 --> <mapper namespace="com.yunqing.mybatis.dao.UserMapper"> <select id="getUserById" resultType="com.yunqing.mybatis.bean.User"> select * from t_user where id = #{id} </select> <insert id="insertUser" parameterType="com.yunqing.mybatis.bean.User" useGeneratedKeys="true"> INSERT INTO t_user(name,gender,email) VALUES (#{name},#{gender},#{email}) </insert> <update id="updateUser" parameterType="com.yunqing.mybatis.bean.User"> UPDATE t_user SET name=#{name},gender=#{gender},email=#{email} where id=#{id} </update> <delete id="deleteUserById"> DELETE from t_user where id=#{id} </delete> </mapper>
UserMapperAnnotation.java介紹注解的方式(不用寫sql的xml映射文件 )
package com.yunqing.mybatis.dao; import com.yunqing.mybatis.bean.User; import org.apache.ibatis.annotations.Select; public interface UserMapperAnnotation { @Select("SELECT * FROM t_user where id = #{id}") User getUserById(Integer id); }
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="conf/dbconfig.properties"></properties> <environments default="development"> <environment id="test"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///db_blog"/> <property name="username" value="root"/> <property name="password" value="5678"/> </dataSource> </environment> <environment id="development"> <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> <!--將寫好的sql映射文件注冊到全局配置文件中,類路徑下直接寫 UserMapper.xml就行,要是在包中則寫com/yunqing/.../UserMapper.xml--> <mappers> <!--<mapper resource="conf/UserMapper.xml"/>--> <!--<mapper class="com.yunqing.mybatis.dao.UserMapperAnnotation"/>--> <package name="com.yunqing.mybatis.dao"/> </mappers> </configuration>
dbconfig.properties
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql:///mybatis
jdbc.username = root
jdbc.password = 5678
測試文件MybatisTest.java
package com.yunqing.mybatis.test; import com.yunqing.mybatis.bean.Blogger; import com.yunqing.mybatis.bean.User; import com.yunqing.mybatis.dao.BloggerMapper; import com.yunqing.mybatis.dao.UserMapper; import com.yunqing.mybatis.dao.UserMapperAnnotation; 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 java.io.IOException; import java.io.InputStream; import java.util.List; public class MybatisTest { @Test public void getAllUser() throws IOException { //從xml中獲取sqlSessionFactory String resource = "conf/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //獲取sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //之前的mybatis的寫法 /*User user = sqlSession.selectOne("com.yunqing.mybatis.UserMapper.selectUserById",1); System.out.println(user);*/ //現在的mybatis接口式編程寫法 //相當於接口的實現類 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> list = userMapper.getAllUser();//查詢第一條記錄 System.out.println(list); sqlSession.close(); } @Test public void getUserById() throws IOException { //從xml中獲取sqlSessionFactory String resource = "conf/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //獲取sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); /*//之前的mybatis的寫法 User user = sqlSession.selectOne("com.yunqing.mybatis.UserMapper.selectUserById",1); System.out.println(user);*/ //現在的mybatis接口式編程寫法 //相當於接口的實現類 UserMapperAnnotation userMapperAnnotation = sqlSession.getMapper(UserMapperAnnotation.class); User user = userMapperAnnotation.getUserById(1);//查詢第一條記錄 System.out.println(user); sqlSession.close(); } @Test public void insertUser() throws IOException { String resource = "conf/mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //使用自動提交,如果不使用則需要sqlSession.commit();手動提交 SqlSession sqlSession = sqlSessionFactory.openSession(true); //SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //需要寫有參和無參構造函數 User user = new User(null,"Letme","1","letme@qq.com"); userMapper.insertUser(user); //sqlSession.commit(); } @Test public void updateUser() throws IOException { String res = "conf/mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(res); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession sqlSession = sqlSessionFactory.openSession(true); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = new User(9,"uzi","1","uzi@qq.com"); userMapper.updateUser(user); } @Test public void deleteUserById() throws IOException { String res = "conf/mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(res); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession sqlSession = sqlSessionFactory.openSession(true); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.deleteUserById(9); } /*@Test public void test2() throws IOException { String resource = "conf/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); BloggerMapper bloggerMapper = sqlSession.getMapper(BloggerMapper.class); List<Blogger> list= bloggerMapper.getAllBloger(); System.out.println(list); sqlSession.close(); }*/ }
如果想獲取自增主鍵的值需要在sql的映射xml文件中加上這兩個參數