mybatis_helloword(1)

时间:2023-12-09 17:20:21

摘录自:http://blog.csdn.net/y172158950/article/details/16979391

新的项目中用到mybatis,虽然不用自己写ORM的代码,但是借这个机会,学习一下。

本章目标:如题,helloWorld。

方法:在CSDN上下载一个demo,简单修改,能跑起来就OK。

1. 环境

a)用到的jar:mybatis-3.0.5.jar ,MySQL-connector-java-5.0.8-bin.jar (只有一个jar,是不是很简单)

b)mysql

c)demo下载路径:http://download.csdn.net/detail/lihonghua168/3579586#comment

2.demo代码目录:

mybatis_helloword(1)

a)configuration.xml :mysql连接配置;基本就2块,一个是数据库连接配置,二是映射实体,相关映射文件。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <typeAliases>
  5. <!-- 映射的实体 -->
  6. <typeAlias type="com.test.Goods"/>
  7. </typeAliases>
  8. <environments default="development">
  9. <environment id="development">
  10. <transactionManager type="JDBC"></transactionManager>
  11. <dataSource type="POOLED">
  12. <property name="driver"
  13. value="com.mysql.jdbc.Driver" />
  14. <property name="url"
  15. value="jdbc:mysql://127.0.0.1:3306/test" />
  16. <property name="username" value="root" />
  17. <property name="password" value="root" />
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <!-- 数据连接成功后执行的对应实体映射文件数据库语句 -->
  23. <mapper resource="com/test/Mapper.xml" />
  24. </mappers>
  25. </configuration>
b)Mapper.xml :sql语句配置文件;sql语句放配置文件,作用不多说,复用。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.test.Mapper">
  4. <select id="selectGood" parameterType="int" resultType="Goods">
  5. select * from test where id =#{id}
  6. </select>
  7. <insert id="insertGood" parameterType="com.test.Goods" useGeneratedKeys="true" keyProperty="id"><!-- 后面两个表示主键自动生成的 -->
  8. insert into test (cateId , name , password , price , description , orderNo , updateTime) values(#{cateId} , #{name} , #{password} , #{price} , #{description} , #{orderNo} , #{updateTime});
  9. </insert>
  10. <delete id="deleteGood" parameterType="int">
  11. delete from test where id=#{id}
  12. </delete>
  13. <update id="updateGood" parameterType="com.test.Goods">
  14. update test set name=#{name},password=#{password},description=#{description},updateTime=#{updateTime} where id=#{id}
  15. </update>
  16. </mapper>
c)Goods.java :结果集与表映射类;和hibernate不同,没有哪里写表与实体的映射关系(存疑)。
  1. package com.test;
  2. import java.util.Date;
  3. /**
  4. * 实体,作为映射时的数据,所以所有字段的名称都必须和数据库里面的一样,不管什么数据库
  5. *
  6. *对应数据库表:
  7. create table test.test (
  8. id bigint(10) primary key AUTO_INCREMENT,
  9. cateId varchar(100),
  10. name varchar(100),
  11. password varchar(100),
  12. price double,
  13. description varchar(100),
  14. orderNo int,
  15. updateTime datetime
  16. );
  17. */
  18. public class Goods {
  19. private long id;
  20. private String cateId;
  21. private String name;
  22. private String password;
  23. private double price;
  24. private String description;
  25. private int orderNo;
  26. private Date updateTime;
  27. public String getCateId() {
  28. return cateId;
  29. }
  30. public long getId() {
  31. return id;
  32. }
  33. public void setId(long id) {
  34. this.id = id;
  35. }
  36. public void setCateId(String cateId) {
  37. this.cateId = cateId;
  38. }
  39. public String getName() {
  40. return name;
  41. }
  42. public void setName(String name) {
  43. this.name = name;
  44. }
  45. public double getPrice() {
  46. return price;
  47. }
  48. public void setPrice(double price) {
  49. this.price = price;
  50. }
  51. public String getDescription() {
  52. return description;
  53. }
  54. public void setDescription(String description) {
  55. this.description = description;
  56. }
  57. public int getOrderNo() {
  58. return orderNo;
  59. }
  60. public void setOrderNo(int orderNo) {
  61. this.orderNo = orderNo;
  62. }
  63. public Date getUpdateTime() {
  64. return updateTime;
  65. }
  66. public void setUpdateTime(Date updateTime) {
  67. this.updateTime = updateTime;
  68. }
  69. public String getPassword() {
  70. return password;
  71. }
  72. public void setPassword(String password) {
  73. this.password = password;
  74. }
  75. }
d)Test1.java :dao类,测试类
  1. package com.test;
  2. import java.io.IOException;
  3. import java.io.Reader;
  4. import java.util.Date;
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9. public class Test1{
  10. public static void main(String args[]) throws IOException {
  11. String resource = "com/test/configuration.xml";//获得xml(Mybatis)数据库连接的连接
  12. Reader reader = Resources.getResourceAsReader(resource);//读取里面的文件
  13. SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
  14. .build(reader);//创建session工厂
  15. SqlSession session = sessionFactory.openSession();//打开session
  16. new Test1().insert(session);
  17. }
  18. /**
  19. * 修改
  20. * @param session
  21. */
  22. public void update(SqlSession session){
  23. int falg=0;
  24. Goods g=new Goods();
  25. g.setId(1);
  26. g.setCateId("2");
  27. g.setName("huage");
  28. g.setPassword("huage");
  29. g.setDescription("He is me");
  30. g.setUpdateTime(new Date());
  31. falg=session.update("com.test.Mapper.updateGood", g);
  32. session.commit();
  33. if(falg==1){
  34. System.out.println("Data update successfully!");
  35. }else{
  36. System.out.println("Data update fail..");
  37. }
  38. session.close();
  39. }
  40. /**
  41. * 删除
  42. * @param session
  43. */
  44. public void delete(SqlSession session){
  45. //session.delete("1");
  46. int falg=0;
  47. falg=session.delete("com.test.Mapper.deleteGood", 1);
  48. session.commit();
  49. if(falg==1){
  50. System.out.println("Data delete successfully!");
  51. }else{
  52. System.out.println("Data dalete fail..");
  53. }
  54. session.close();
  55. }
  56. /**
  57. * 插入数据
  58. * @param session
  59. */
  60. public void insert(SqlSession session){
  61. Goods g=new Goods();
  62. g.setCateId("2");
  63. g.setName("huage");
  64. g.setPassword("huage");
  65. g.setPrice(5);
  66. g.setDescription("He is me");
  67. g.setOrderNo(2);
  68. g.setUpdateTime(new Date());
  69. int flag=0;
  70. flag=session.insert("com.test.Mapper.insertGood",g);
  71. session.commit();//一定要提交才能插入数据
  72. if(flag==1){
  73. System.out.println("Data inserted successfully!");
  74. }else{
  75. System.out.println("Data inserted fails!");
  76. }
  77. session.close();
  78. }
  79. /**
  80. * 查询
  81. * @param session
  82. */
  83. public void select(SqlSession session){
  84. try {
  85. Goods goods = (Goods) session.selectOne("com.test.Mapper.selectGood", 1);//执行数据操作
  86. System.out.println("good name is : " + goods.getName());
  87. System.out.println("description :="+goods.getDescription());
  88. System.out.println("orderNo :="+goods.getOrderNo());
  89. System.out.println("price :="+goods.getPrice());
  90. System.out.println("updateTiem :="+goods.getUpdateTime());
  91. System.out.println("id :="+goods.getId());
  92. System.out.println("password :="+goods.getPassword());
  93. System.out.println("cateid :="+goods.getCateId());
  94. } catch (Exception e) {
  95. e.printStackTrace();
  96. } finally {
  97. session.close();
  98. }
  99. }
  100. }
e)Test1.java流程分析

i. 通过Reader类读取configuration.xml类容,获取数据库连接配置及相关实体类、sql语句配置信息。

ii. 依据Reader的信息创建SqlSessionFactory。(这2步在实际工程中调用一次即可)

iii. 创建SqlSession,相当于JDBC的Connection

iv. insert数据:封装了sql语句,封装了映射过程(update,remove,select过程类似)

1)封装Goods实体。

2)调用session.insert方法:2个参数,"com.test.Mapper.insertGood“,去Mapper.xml找下,insert语句已经写好了;g,实体

3)commit,close连接。

f)数据库结果

mybatis_helloword(1)