一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java通過MyBatis框架對MySQL數據進行增刪查改的基本方法

Java通過MyBatis框架對MySQL數據進行增刪查改的基本方法

2020-05-08 11:52czj4451 JAVA教程

MyBatis框架由Java的JDBC API進一步封裝而來,在操作數據庫方面效果拔群,接下來我們就一起來看看Java通過MyBatis框架對MySQL數據進行增刪查改的基本方法:

1. 查詢

除了單條記錄的查詢,這里我們來嘗試查詢一組記錄。

IUserMapper接口添加下面方法:

?
1
List<User> getUsers(String name);

在User.xml中添加:

?
1
2
3
4
5
6
7
8
9
10
<resultMap type="User" id="userList"><!-- type為返回列表元素的類全名或別名 -->
  <id column="id" property="id" />
  <result column="name" property="name" />
  <result column="age" property="age" />
  <result column="address" property="address" />
</resultMap>
 
<select id="getUsers" parameterType="string" resultMap="userList"><!-- resultMap為上面定義的User列表 -->
  select * from `user` where name like #{name}
</select>

測試方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void queryListTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    List<User> users = mapper.getUsers("%a%"); // %在sql里代表任意個字符。
    for (User user : users) {
      log.info("{}: {}", user.getName(), user.getAddress());
    }
  } finally {
    session.close();
  }
}

如果聯表查詢,返回的是復合對象,需要用association關鍵字來處理。
如User發表Article,每個用戶可以發表多個Article,他們之間是一對多的關系。

(1) 創建Article表,并插入測試數據:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- Drop the table if exists
DROP TABLE IF EXISTS `Article`;
 
-- Create a table named 'Article'
CREATE TABLE `Article` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` int NOT NULL,
  `title` varchar(100) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
-- Add several test records
INSERT INTO `article`
VALUES
('1', '1', 'title1', 'content1'),
('2', '1', 'title2', 'content2'),
('3', '1', 'title3', 'content3'),
('4', '1', 'title4', 'content4');

(2) com.john.hbatis.model.Article類:

?
1
2
3
4
5
6
7
public class Article {
  private int id;
  private User user;
  private String title;
  private String content;
  // Getters and setters are omitted
}

(3) 在IUserMapper中添加:

?
1
List<Article> getArticlesByUserId(int id);

(4) 在User.xml中添加:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<resultMap type="com.john.hbatis.model.Article" id="articleList">
  <id column="a_id" property="id" />
  <result column="title" property="title" />
  <result column="content" property="content" />
   
  <association property="user" javaType="User"><!-- user屬性映射到User類 -->
    <id column="id" property="id" />
    <result column="name" property="name" />
    <result column="address" property="address" />
  </association>
</resultMap>
 
<select id="getArticlesByUserId" parameterType="int" resultMap="articleList">
  select u.id, u.name, u.age, u.address, a.id a_id, a.title, a.content
  from article a
  inner join user u
  on a.user_id=u.id and u.id=#{id}
</select>

(5)測試方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void getArticlesByUserIdTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    List<Article> articles = mapper.getArticlesByUserId(1);
    for (Article article : articles) {
      log.info("{} - {}, author: {}", article.getTitle(), article.getContent(), article.getUser().getName());
    }
  } finally {
    session.close();
  }
}

附:
除了在association標簽內定義字段和屬性的映射外,還可以重用User的resultMap:

?
1
<association property="user" javaType="User" resultMap="userList" />

2. 新增

IUserMapper接口添加下面方法:

int addUser(User user); 

User.xml添加:

?
1
2
3
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"><!-- useGeneratedKeys指定myBatis使用數據庫自動生成的主鍵,并填充到keyProperty指定的屬性上。如果未指定,返回對象拿不到生成的值 -->
  insert into user(name,age,address) values(#{name},#{age},#{address})
</insert>

測試方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void addUserTest() {
  User user = new User("Lucy", 102, "Happy District");
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    int affectedCount = mapper.addUser(user);
    session.commit(); // 默認為不自動提交。調用session.getConnection().getAutoCommit()查看
    log.info("{} new record was inserted successfully whose id: {}", affectedCount, user.getId());
  } finally {
    session.close();
  }
}

3. 更新

接口添加方法:

?
1
int updateUser(User user);

User.xml添加:

?
1
2
3
4
<update id="updateUser" parameterType="User">
  update `user` set name=#{name}, age=#{age}, address=#{address}
  where id=#{id}
</update>

測試方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Test
public void updateUserTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    User user = mapper.getUserById(8);
    user.setAddress("Satisfied District");
    int affectedCount = mapper.updateUser(user); // 除了要修改的屬性外,user的其它屬性也要賦值,否則這些屬性會被數據庫更新為初始值(null或0等),可以先查詢一次,但這樣會增加和數據庫不必要的交互。后面的條件判斷能避免此問題。
    log.info("Affected count: {}", affectedCount);
    session.commit();
  } finally {
    session.close();
  }
}

 4. 刪除

接口添加方法:

?
1
int deleteUser(int id);

User.xml添加:

?
1
2
3
<delete id="deleteUser" parameterType="int">
  delete from `user` where id=#{id}
</delete>

測試方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
@Test
public void deleteUserTest() {
  SqlSession session = sqlSessionFactory.openSession();
  try {
    IUserMapper mapper = session.getMapper(IUserMapper.class);
    int affectedCount = mapper.deleteUser(8);
    log.info("Affected count: {}", affectedCount);
    session.commit();
  } finally {
    session.close();
  }
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性色AV乱码一区二区三区视频 | 亚洲成av人片天堂网 | 久久99精品国产免费观看 | 国产黄频在线观看高清免费 | 男女性gif抽搐出入视频 | 国内老司机精品视频在线播出 | 国产图色 | 大胸纲手被羞羞漫画网站 | 506rr亚洲欧美 | 国产成人精品免费 | 日本护士厕所xxx | 亚洲日韩精品欧美一区二区 | bdsm酷刑折磨死美女 | 色天使亚洲综合在线观看 | 古装全套 毛片 | 1024亚洲天堂 | 日本在线视频免费观看 | 东北疯狂xxxxbbbb中国 | 久久影院中文字幕 | 激情文学综合网 | 亚洲品质自拍视频 | 成成人看片在线 | 娇小性色 | 国产99久久九九精品免费 | 精品国产欧美一区二区五十路 | 99视频全部看免费观 | 97影院网| 冰雪奇缘1完整版免费观看 变形金刚第一部 | 免费超级乱淫视频播放性 | 久久re热在线视频精6 | 午夜在线a亚洲v天堂网2019 | 2020最新韩国理论三级0k | 久久久久国产一级毛片高清片 | 亚洲另类第一页 | 欧美精品v欧洲高清 | 国内精品 大秀视频 日韩精品 | acg火影忍者熟密姬纲手h | www射com| kisssis无减删全集在线观看 | 亚洲精彩视频在线观看 | 精品一区二区三区 不卡高清 |