Mybatis入门程序

1、创建数据库

  创建如下的的一个数据库表

2、需求

实现以下功能:

  1. 根据用户id查询一个用户信息
  2. 根据用户名称模糊查询用户信息列表
  3. 添加用户
  4. 更新用户
  5. 删除用户

3、创建java工程

4、 导入需要的jar包

5、在classpath下面创建log4j.properties文件

  Mybatis使用log4j作为日志输出,因此要创建log4j.properties配置文件。
文件内容如下:

	log4j.rootLogger=DEBUG, stdout
	log4j.appender.stdout=org.apache.log4j.ConsoleAppender
	log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
	log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6、在classpath下创建SqlMapConfig.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>
       
    <!--
    环境配置
    在和Spring整合后改配置将废除
    -->
    <environments default="development">
    
    	<environment id="development">
    <!--使用JDBC的事务管理,事务管理交给Mybatis-->
    <transactionManager type="JDBC"></transactionManager>
    <!--数据库连接池,有Mybatis管理-->
   		 <dataSource type="POOLED">
    		 <property name="driver" value="com.mysql.jdbc.Driver" />
   			 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
   			 <property name="username" value="root" />
    		 <property name="password" value="root" />
    	</dataSource>
    	</environment>
    </environments>
    </configuration>

7、创建PO类

	public class User {
	    private int id;
	    private String username;
	    private Date birthday;
	    private String sex;
	    private String address;
	
	    public int getId() {
	        return id;
	    }
	
	    public void setId(int id) {
	        this.id = id;
	    }
	
	    public String getUsername() {
	        return username;
	    }
	
	    public void setUsername(String username) {
	        this.username = username;
	    }
	
	    public Date getBirthday() {
	        return birthday;
	    }
	
	    public void setBirthday(Date birthday) {
	        this.birthday = birthday;
	    }
	
	    public String getSex() {
	        return sex;
	    }
	
	    public void setSex(String sex) {
	        this.sex = sex;
	    }
	
	    public String getAddress() {
	        return address;
	    }
	
	    public void setAddress(String address) {
	        this.address = address;
	    }
	
	    @Override
	    public String toString() {
	        return "User{" +
	                "id=" + id +
	                ", username='" + username + '\'' +
	                ", birthday=" + birthday +
	                ", sex='" + sex + '\'' +
	                ", address='" + address + '\'' +
	                '}';
	    }
	}

8、创建映射文件,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:命名空间,对SQL进行分类化的管理,进行sql隔离
-->
<mapper namespace="test">
    <!--
        查询sql语句配置使用select标签
        id:该语句的唯一标识,通常称为statement的id
        parameterType:输入参数的类型
        resultType:返回数据的类型,指定为Java的po类型,则将查询出来的单条记录映射为po对象。
    -->
    <select id="findUserById" parameterType="int" resultType="com.jack.po.User" >
        <!--
            要执行的sql语句
            #{} :表示一个占位符
            #{value} :value表示接受的参数,名称为value,如果参数是简单类型,则名称可以随意起。
        -->
          SELECT * FROM user WHERE  id=#{value}
    </select>

    <select id="findUserByName" parameterType="String" resultType="com.jack.po.User">
        SELECT * FROM user WHERE username LIKE '%${value}%'
    </select>

    <insert id="insertUserInfo" parameterType="com.jack.po.User">
        <!--
            获取插入记录的id,只适用于mysql数据库的自增主键
            keyProperty:主键名称
            order:获取主键的时间。在insert语句执行之前还是之后
            resultType:返回的数据类型
         -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        <!--输入参数为一个po时,#{}中间要写该po类的属性名称-->
        INSERT INTO user(username,birthday,sex,address) VALUE (#{username},#{birthday},#{sex},#{address})
    </insert>

    <update id="updateUserInfo" parameterType="com.jack.po.User" >
        UPDATE user set birthday=#{birthday},sex=#{sex},address=#{address} WHERE  id=#{id}
    </update>

<update id="deleteUserInfo" parameterType="int" >
    DELETE FROM user WHERE  id=#{value}
</update>
</mapper>

9、在SqlMapConfig.xml中引入上面的配置文件

 <!--引入mapper-->
    <mappers>
        <!--rerource:引入映射文件相对于classpath的地址-->
        <mapper resource="config/sqlmap/user.xml" />
    </mappers>

10、创建测试类

public class UserTest {

    private SqlSessionFactory sessionFactory;
    @Before
    public void setUp() throws  Exception{
        //SqlMapConfig.xml相对于classpath的地址
        String resource = "config/SqlMapConfig.xml";
        //使用inputString读入该配置文件
        InputStream in = Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory对象
        sessionFactory = new SqlSessionFactoryBuilder().build(in);
        }


    @Test
public void findUserById(){
        //创建SqlSession对象
        SqlSession sqlSession = sessionFactory.openSession();
    try {
        /**
         * 执行SqlSession对象的方法
         * 第一个参数为:映射文件中的namespace+.+statement id
         * 第二个参数为:要传入的参数值
         */
        User user =  sqlSession.selectOne("test.findUserById",1);
        System.out.println(user);
    } catch (Exception e) {
        e.printStackTrace();
    }finally {

    }
}

    @Test
    public void findUserByName(){
        SqlSession sqlSession = sessionFactory.openSession();
        try {
           List<User> list  =  sqlSession.selectList("test.findUserByName","小明");
            for (User user:list) {
                System.out.println(user);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {

        }
    }

    @Test
    public void insertUserInfo(){
        SqlSession sqlSession = sessionFactory.openSession();
        try {
            User user = new User();
            user.setId(26);
            user.setBirthday(new Date());
            user.setSex("1");
            user.setAddress("甘肃天水");
            sqlSession.update("test.insertUserInfo",user);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {

        }
    }

    public void updateUserInfo(){
        SqlSession sqlSession = sessionFactory.openSession();
        try {
            User user = new User();
            user.setUsername("东方不败");
            user.setBirthday(new Date());
            user.setSex("0");
            user.setAddress("黑木崖");
            int id =sqlSession.insert("test.updateUserInfo",user);
            System.out.println(id);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {

        }
    }

    @Test
    public void deleteUserInfo(){
        SqlSession sqlSession = sessionFactory.openSession();
        try {

            sqlSession.delete("test.deleteUserInfo",28);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {

        }
    }
}
posted @ 2017-07-26 10:53  一条路上的咸鱼  阅读(198)  评论(0编辑  收藏  举报